mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-04 13:56:07 +02:00
improve activity tab performance by adding indexes
This commit is contained in:
@@ -195,16 +195,23 @@ async function upsertMeta(entry) {
|
||||
}
|
||||
|
||||
async function upsertSessions(userId, sessions = []) {
|
||||
for (const session of sessions) {
|
||||
const chunkSize = 250;
|
||||
for (let chunkStart = 0; chunkStart < sessions.length; chunkStart += chunkSize) {
|
||||
const chunk = sessions.slice(chunkStart, chunkStart + chunkSize);
|
||||
const args = {};
|
||||
const values = chunk.map((session, index) => {
|
||||
const suffix = `${chunkStart + index}`;
|
||||
args[`@user_id_${suffix}`] = userId;
|
||||
args[`@start_at_${suffix}`] = session.start;
|
||||
args[`@end_at_${suffix}`] = session.end;
|
||||
return `(@user_id_${suffix}, @start_at_${suffix}, @end_at_${suffix})`;
|
||||
});
|
||||
|
||||
await sqliteService.executeNonQuery(
|
||||
`INSERT OR REPLACE INTO ${dbVars.userPrefix}_activity_cache_sessions
|
||||
(user_id, start_at, end_at)
|
||||
VALUES (@user_id, @start_at, @end_at)`,
|
||||
{
|
||||
'@user_id': userId,
|
||||
'@start_at': session.start,
|
||||
'@end_at': session.end
|
||||
}
|
||||
VALUES ${values.join(', ')}`,
|
||||
args
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,9 @@ const database = {
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE TABLE IF NOT EXISTS ${dbVars.userPrefix}_feed_online_offline (id INTEGER PRIMARY KEY, created_at TEXT, user_id TEXT, display_name TEXT, type TEXT, location TEXT, world_name TEXT, time INTEGER, group_name TEXT)`
|
||||
);
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE INDEX IF NOT EXISTS ${dbVars.userPrefix}_feed_online_offline_user_created_idx ON ${dbVars.userPrefix}_feed_online_offline (user_id, created_at)`
|
||||
);
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE TABLE IF NOT EXISTS ${dbVars.userPrefix}_activity_cache_meta (user_id TEXT PRIMARY KEY, updated_at TEXT, is_self INTEGER DEFAULT 0, source_last_created_at TEXT, pending_session_start_at INTEGER)`
|
||||
);
|
||||
|
||||
@@ -15,6 +15,11 @@ const tableAlter = {
|
||||
// await sqliteService.executeNonQuery('PRAGMA user_version = 1');
|
||||
},
|
||||
|
||||
async updateActivityTabDatabaseVersion() {
|
||||
await this.ensureActivityCacheTables();
|
||||
await this.ensureFeedOnlineOfflineIndexes();
|
||||
},
|
||||
|
||||
async updateTableForGroupNames() {
|
||||
var tables = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
@@ -100,6 +105,18 @@ const tableAlter = {
|
||||
`CREATE INDEX IF NOT EXISTS ${userPrefix}_activity_cache_sessions_user_start_idx ON ${userPrefix}_activity_cache_sessions (user_id, start_at)`
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
async ensureFeedOnlineOfflineIndexes() {
|
||||
const tables = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
tables.push(dbRow[0]);
|
||||
}, `SELECT name FROM sqlite_schema WHERE type='table' AND name LIKE '%_feed_online_offline'`);
|
||||
for (const tableName of tables) {
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE INDEX IF NOT EXISTS ${tableName}_user_created_idx ON ${tableName} (user_id, created_at)`
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user