mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 06:19:05 +08:00
feat: configure WAL mode for improved database performance
- Introduced a new method to configure Write-Ahead Logging (WAL) mode for better concurrency during database operations. - Ensured WAL mode is set only once, with error handling to fall back to default settings if configuration fails. - Updated the migrateDb method to call the new configuration method on the first database operation.
This commit is contained in:
parent
1e4239d189
commit
55727e2adf
@ -1,4 +1,5 @@
|
|||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
|
import { sql } from 'drizzle-orm'
|
||||||
import { drizzle } from 'drizzle-orm/libsql'
|
import { drizzle } from 'drizzle-orm/libsql'
|
||||||
import { migrate } from 'drizzle-orm/libsql/migrator'
|
import { migrate } from 'drizzle-orm/libsql/migrator'
|
||||||
import { app } from 'electron'
|
import { app } from 'electron'
|
||||||
@ -36,6 +37,7 @@ class DbService {
|
|||||||
private static instance: DbService
|
private static instance: DbService
|
||||||
private db: DbType
|
private db: DbType
|
||||||
private isInitialized = false
|
private isInitialized = false
|
||||||
|
private walConfigured = false
|
||||||
|
|
||||||
private constructor() {
|
private constructor() {
|
||||||
try {
|
try {
|
||||||
@ -66,12 +68,37 @@ class DbService {
|
|||||||
return DbService.instance
|
return DbService.instance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure WAL mode for better concurrency performance
|
||||||
|
* Called once during the first database operation
|
||||||
|
*/
|
||||||
|
private async configureWAL(): Promise<void> {
|
||||||
|
if (this.walConfigured) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this.db.run(
|
||||||
|
sql`PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL; PRAGMA foreign_keys = ON`
|
||||||
|
)
|
||||||
|
|
||||||
|
this.walConfigured = true
|
||||||
|
logger.info('WAL mode configured for database')
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn('Failed to configure WAL mode, using default journal mode', error as Error)
|
||||||
|
// Don't throw error, allow database to continue with default mode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run database migrations
|
* Run database migrations
|
||||||
* @throws {Error} If migration fails
|
* @throws {Error} If migration fails
|
||||||
*/
|
*/
|
||||||
public async migrateDb(): Promise<void> {
|
public async migrateDb(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
// Configure WAL mode on first database operation
|
||||||
|
await this.configureWAL()
|
||||||
|
|
||||||
const migrationsFolder = this.getMigrationsFolder()
|
const migrationsFolder = this.getMigrationsFolder()
|
||||||
await migrate(this.db, { migrationsFolder })
|
await migrate(this.db, { migrationsFolder })
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user