Add DB indexes for performance
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,6 +3,8 @@ yt_auth_token
|
|||||||
spotify_auth_token
|
spotify_auth_token
|
||||||
tidal_auth_token
|
tidal_auth_token
|
||||||
*.db
|
*.db
|
||||||
|
*.db-shm
|
||||||
|
*.db-wal
|
||||||
feed.xml
|
feed.xml
|
||||||
playbook.yml
|
playbook.yml
|
||||||
inventory.yml
|
inventory.yml
|
||||||
|
36
package-lock.json
generated
36
package-lock.json
generated
@ -34,6 +34,7 @@
|
|||||||
"prettier": "^3.1.0",
|
"prettier": "^3.1.0",
|
||||||
"prettier-plugin-svelte": "^3.2.6",
|
"prettier-plugin-svelte": "^3.2.6",
|
||||||
"svelte": "^5",
|
"svelte": "^5",
|
||||||
|
"svelte-adapter-bun": "^0.5.2",
|
||||||
"svelte-check": "^4.0.0",
|
"svelte-check": "^4.0.0",
|
||||||
"tslib": "^2.0.0",
|
"tslib": "^2.0.0",
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0"
|
||||||
@ -3309,6 +3310,20 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/globalyzer": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/globrex": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
|
||||||
|
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/graceful-fs": {
|
"node_modules/graceful-fs": {
|
||||||
"version": "4.2.11",
|
"version": "4.2.11",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||||
@ -5124,6 +5139,16 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/svelte-adapter-bun": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/svelte-adapter-bun/-/svelte-adapter-bun-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-xEtFgaal6UgrCwwkSIcapO9kopoFNUYCYqyKCikdqxX9bz2TDYnrWQZ7qBnkunMxi1HOIERUCvTcebYGiarZLA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"tiny-glob": "^0.2.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/svelte-check": {
|
"node_modules/svelte-check": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.0.tgz",
|
||||||
@ -5260,6 +5285,17 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tiny-glob": {
|
||||||
|
"version": "0.2.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
|
||||||
|
"integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"globalyzer": "0.1.0",
|
||||||
|
"globrex": "^0.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tinyglobby": {
|
"node_modules/tinyglobby": {
|
||||||
"version": "0.2.14",
|
"version": "0.2.14",
|
||||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
|
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"prettier": "^3.1.0",
|
"prettier": "^3.1.0",
|
||||||
"prettier-plugin-svelte": "^3.2.6",
|
"prettier-plugin-svelte": "^3.2.6",
|
||||||
"svelte": "^5",
|
"svelte": "^5",
|
||||||
|
"svelte-adapter-bun": "^0.5.2",
|
||||||
"svelte-check": "^4.0.0",
|
"svelte-check": "^4.0.0",
|
||||||
"tslib": "^2.0.0",
|
"tslib": "^2.0.0",
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0"
|
||||||
|
@ -97,6 +97,7 @@ const ignoredUsers: string[] =
|
|||||||
let databaseReady = false;
|
let databaseReady = false;
|
||||||
|
|
||||||
if (enableVerboseLog) {
|
if (enableVerboseLog) {
|
||||||
|
logger.verbose('Enabling verbose DB log');
|
||||||
sqlite3.verbose();
|
sqlite3.verbose();
|
||||||
db.on('change', (t, d, table, rowid) => {
|
db.on('change', (t, d, table, rowid) => {
|
||||||
logger.verbose('DB change event', t, d, table, rowid);
|
logger.verbose('DB change event', t, d, table, rowid);
|
||||||
@ -106,8 +107,16 @@ if (enableVerboseLog) {
|
|||||||
logger.verbose('Running', sql);
|
logger.verbose('Running', sql);
|
||||||
});
|
});
|
||||||
|
|
||||||
db.on('profile', (sql) => {
|
db.on('profile', (sql, time) => {
|
||||||
logger.verbose('Finished', sql);
|
if (sql.startsWith('EXPLAIN')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
logger.verbose('Finished', sql, 'time', time);
|
||||||
|
if (sql.startsWith('SELECT')) {
|
||||||
|
db.get('EXPLAIN QUERY PLAN ' + sql, (a: sqlite3.RunResult, b: Error) => {
|
||||||
|
logger.verbose(sql, a, b);
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,6 +162,9 @@ async function applyMigration(migration: Migration) {
|
|||||||
db.on('open', () => {
|
db.on('open', () => {
|
||||||
logger.info('Opened database');
|
logger.info('Opened database');
|
||||||
db.serialize();
|
db.serialize();
|
||||||
|
db.run('pragma journal_mode = WAL;');
|
||||||
|
db.run('pragma synchronous = normal;');
|
||||||
|
db.run('pragma journal_size_limit = 6144000;');
|
||||||
db.run('CREATE TABLE IF NOT EXISTS "migrations" ("id" integer,"name" TEXT, PRIMARY KEY (id))');
|
db.run('CREATE TABLE IF NOT EXISTS "migrations" ("id" integer,"name" TEXT, PRIMARY KEY (id))');
|
||||||
db.all('SELECT id FROM migrations', (err, rows: Migration[]) => {
|
db.all('SELECT id FROM migrations', (err, rows: Migration[]) => {
|
||||||
if (err !== null) {
|
if (err !== null) {
|
||||||
@ -344,6 +356,26 @@ function getMigrations(): Migration[] {
|
|||||||
name: 'song tidal id',
|
name: 'song tidal id',
|
||||||
statement: `
|
statement: `
|
||||||
ALTER TABLE songs ADD COLUMN tidalId TEXT NULL;`
|
ALTER TABLE songs ADD COLUMN tidalId TEXT NULL;`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 10,
|
||||||
|
name: 'add indexes',
|
||||||
|
statement: `
|
||||||
|
CREATE INDEX posts_created_at ON posts(created_at);
|
||||||
|
CREATE INDEX accounts_acct ON accounts(acct);
|
||||||
|
CREATE INDEX accounts_username ON accounts(username);`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 11,
|
||||||
|
name: 'add FK indexes',
|
||||||
|
statement: `
|
||||||
|
CREATE INDEX migrations_id ON migrations(id);
|
||||||
|
CREATE INDEX accountsavatars_account_url ON accountsavatars(account_url);
|
||||||
|
CREATE INDEX posts_account_id ON posts(account_id);
|
||||||
|
CREATE INDEX poststags_post_id ON poststags(post_id);
|
||||||
|
CREATE INDEX poststags_tag_url ON poststags(tag_url);
|
||||||
|
CREATE INDEX songs_post_url ON songs(post_url);
|
||||||
|
CREATE INDEX songsthumbnails_song_thumbnailUrl ON songsthumbnails(song_thumbnailUrl);`
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -618,7 +650,6 @@ function getSongData(postIdsParams: string, postIds: string[]): Promise<Map<stri
|
|||||||
},
|
},
|
||||||
new Map()
|
new Map()
|
||||||
);
|
);
|
||||||
logger.verbose('songMap', songMap);
|
|
||||||
resolve(songMap);
|
resolve(songMap);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -2,18 +2,11 @@ import type { Post } from '$lib/mastodon/response';
|
|||||||
import type { PageLoad } from './$types';
|
import type { PageLoad } from './$types';
|
||||||
|
|
||||||
export const load = (async ({ fetch, setHeaders }) => {
|
export const load = (async ({ fetch, setHeaders }) => {
|
||||||
const start = performance.now();
|
|
||||||
const p = await fetch('/');
|
const p = await fetch('/');
|
||||||
const afterFetch = performance.now();
|
|
||||||
console.debug('+page.ts: Fetch took', afterFetch - start, 'ms');
|
|
||||||
setHeaders({
|
setHeaders({
|
||||||
'cache-control': 'public,max-age=60'
|
'cache-control': 'public,max-age=60'
|
||||||
});
|
});
|
||||||
const afterHeaders = performance.now();
|
|
||||||
console.debug('+page.ts: Headers took', afterHeaders - afterFetch, 'ms');
|
|
||||||
const j: Post[] = await p.json();
|
const j: Post[] = await p.json();
|
||||||
const afterJson = performance.now();
|
|
||||||
console.debug('+page.ts: JSON took', afterJson - afterHeaders, 'ms');
|
|
||||||
return {
|
return {
|
||||||
posts: j
|
posts: j
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// Does not seem to work
|
||||||
|
//import adapter from 'svelte-adapter-bun';
|
||||||
import adapter from '@sveltejs/adapter-node';
|
import adapter from '@sveltejs/adapter-node';
|
||||||
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user