Set SQLite PRAGMAs on start
This commit is contained in:
parent
149f8f6f04
commit
d63de0ad0b
|
@ -144,9 +144,25 @@ const Conf = {
|
||||||
local(path: string): string {
|
local(path: string): string {
|
||||||
return mergePaths(Conf.localDomain, path);
|
return mergePaths(Conf.localDomain, path);
|
||||||
},
|
},
|
||||||
|
/** URL to send Sentry errors to. */
|
||||||
get sentryDsn() {
|
get sentryDsn() {
|
||||||
return Deno.env.get('SENTRY_DSN');
|
return Deno.env.get('SENTRY_DSN');
|
||||||
},
|
},
|
||||||
|
/** SQLite settings. */
|
||||||
|
sqlite: {
|
||||||
|
/**
|
||||||
|
* Number of bytes to use for memory-mapped IO.
|
||||||
|
* https://www.sqlite.org/pragma.html#pragma_mmap_size
|
||||||
|
*/
|
||||||
|
get mmapSize(): number {
|
||||||
|
const value = Deno.env.get('SQLITE_MMAP_SIZE');
|
||||||
|
if (value) {
|
||||||
|
return Number(value);
|
||||||
|
} else {
|
||||||
|
return 1024 * 1024 * 1024;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const optionalBooleanSchema = z
|
const optionalBooleanSchema = z
|
||||||
|
|
19
src/db.ts
19
src/db.ts
|
@ -1,7 +1,7 @@
|
||||||
import fs from 'node:fs/promises';
|
import fs from 'node:fs/promises';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { DenoSqlite3, DenoSqliteDialect, FileMigrationProvider, Kysely, Migrator } from '@/deps.ts';
|
import { DenoSqlite3, DenoSqliteDialect, FileMigrationProvider, Kysely, Migrator, sql } from '@/deps.ts';
|
||||||
import { Conf } from '@/config.ts';
|
import { Conf } from '@/config.ts';
|
||||||
|
|
||||||
interface DittoDB {
|
interface DittoDB {
|
||||||
|
@ -55,12 +55,27 @@ interface UnattachedMediaRow {
|
||||||
uploaded_at: Date;
|
uploaded_at: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const sqlite = new DenoSqlite3(Conf.dbPath);
|
||||||
|
|
||||||
|
setPragmas(sqlite, {
|
||||||
|
synchronous: 'normal',
|
||||||
|
temp_store: 'memory',
|
||||||
|
mmap_size: Conf.sqlite.mmapSize,
|
||||||
|
});
|
||||||
|
|
||||||
const db = new Kysely<DittoDB>({
|
const db = new Kysely<DittoDB>({
|
||||||
dialect: new DenoSqliteDialect({
|
dialect: new DenoSqliteDialect({
|
||||||
database: new DenoSqlite3(Conf.dbPath),
|
database: sqlite,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function setPragmas(db: DenoSqlite3, pragmas: Record<string, string | number>) {
|
||||||
|
for (const [pragma, value] of Object.entries(pragmas)) {
|
||||||
|
db.prepare(`PRAGMA ${pragma} = ${value}`).run();
|
||||||
|
console.log(`PRAGMA ${pragma} = ${db.prepare(`PRAGMA ${pragma}`).value()}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const migrator = new Migrator({
|
const migrator = new Migrator({
|
||||||
db,
|
db,
|
||||||
provider: new FileMigrationProvider({
|
provider: new FileMigrationProvider({
|
||||||
|
|
Loading…
Reference in New Issue