From b9179c7108d979523ecefa70dc01f05b4e4ba1ed Mon Sep 17 00:00:00 2001 From: tobinio Date: Wed, 20 Aug 2025 19:06:54 +0200 Subject: [PATCH] cache db access --- nuxt.config.ts | 6 +---- server/api/stats/global.ts | 2 +- server/api/stats/projects.ts | 2 +- server/api/stats/time/global.ts | 2 +- server/api/stats/time/projects.ts | 2 +- server/api/stats/time/revenue.ts | 2 +- server/utils/storage.ts | 37 +++++++++++++++++++++++++------ 7 files changed, 36 insertions(+), 17 deletions(-) diff --git a/nuxt.config.ts b/nuxt.config.ts index 52a1837..4333564 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -63,11 +63,7 @@ export default defineNuxtConfig({ }, }, nitro: { - devStorage: { - cache: { - driver: "null", - }, - }, + devStorage: {}, experimental: { tasks: true, }, diff --git a/server/api/stats/global.ts b/server/api/stats/global.ts index 82cdc74..fb0fd29 100644 --- a/server/api/stats/global.ts +++ b/server/api/stats/global.ts @@ -18,5 +18,5 @@ export default defineCachedEventHandler( return globalStats; }, - { maxAge: 60 * 60 /* 1 hour */, swr: false }, + { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/api/stats/projects.ts b/server/api/stats/projects.ts index bcd2612..b0de9dd 100644 --- a/server/api/stats/projects.ts +++ b/server/api/stats/projects.ts @@ -26,5 +26,5 @@ export default defineCachedEventHandler( query.versionFrom, ); }, - { maxAge: 60 * 60 /* 1 hour */, swr: false }, + { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/api/stats/time/global.ts b/server/api/stats/time/global.ts index 73ffeb7..952cc53 100644 --- a/server/api/stats/time/global.ts +++ b/server/api/stats/time/global.ts @@ -56,5 +56,5 @@ export default defineCachedEventHandler( } return summarize(data, 64, true); }, - { maxAge: 60 * 60 /* 1 hour */, swr: false }, + { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/api/stats/time/projects.ts b/server/api/stats/time/projects.ts index 4b65822..825ee28 100644 --- a/server/api/stats/time/projects.ts +++ b/server/api/stats/time/projects.ts @@ -35,5 +35,5 @@ export default defineCachedEventHandler( } return summarize(data, dataPoints, true); }, - { maxAge: 60 * 60 /* 1 hour */, swr: false }, + { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/api/stats/time/revenue.ts b/server/api/stats/time/revenue.ts index eff3ea8..b53d439 100644 --- a/server/api/stats/time/revenue.ts +++ b/server/api/stats/time/revenue.ts @@ -5,5 +5,5 @@ export default defineCachedEventHandler( var data = await exportRevenueStatsOverTime(); return data; }, - { maxAge: 60 * 60 /* 1 hour */, swr: false }, + { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/utils/storage.ts b/server/utils/storage.ts index 9262c4c..5dbd14b 100644 --- a/server/utils/storage.ts +++ b/server/utils/storage.ts @@ -12,7 +12,7 @@ export const DB = { await storage.setItem("gameVersions", gameVersions); }, async get(): Promise { - return getFromStorage("metadata", "gameVersions"); + return getFromStorageCached("metadata", "gameVersions"); }, }, LatestDate: { @@ -21,7 +21,7 @@ export const DB = { await storage.setItem("latestDate", dateToKey(date)); }, async get(): Promise { - return getFromStorage("metadata", "latestDate"); + return getFromStorageCached("metadata", "latestDate"); }, }, GlobalStats: { @@ -37,14 +37,14 @@ export const DB = { return `globalStats${dateKey}`; }); - return getFromStorageBulk("globalStatistics", keys); + return getFromStorageCachedBulk("globalStatistics", keys); }, async getLatest(): Promise { const dateKey = await DB.LatestDate.get(); if (dateKey instanceof Error) return dateKey; const key = `globalStats${dateKey}`; - return getFromStorage("globalStatistics", key); + return getFromStorageCached("globalStatistics", key); }, }, ProjectStats: { @@ -80,7 +80,7 @@ export const DB = { dateKey, ); - return getFromStorage("projectStatistics", key); + return await getFromStorageCached("projectStatistics", key); }, async getBulk( dates: Date[], @@ -93,7 +93,7 @@ export const DB = { return getProjectStorageKey(type, versionCategory, exclusive, dateKey); }); - return getFromStorageBulk("projectStatistics", keys); + return getFromStorageCachedBulk("projectStatistics", keys); }, async getLatest( type: ProjectTypes, @@ -109,7 +109,7 @@ export const DB = { exclusive, dateKey, ); - return getFromStorage("projectStatistics", key); + return getFromStorageCached("projectStatistics", key); }, }, }; @@ -131,6 +131,17 @@ function getProjectStorageKey( return key; } +const getFromStorageCached = defineCachedFunction( + async (storageName: string, key: string) => { + return await getFromStorage(storageName, key); + }, + { + maxAge: 60 * 60 * 2, // 2 hours + name: "getFromStorageCached", + getKey: (storageName: string, key: string) => `${storageName}-${key}`, + }, +) as (storageName: string, key: string) => Promise; + async function getFromStorage(storageName: string, key: string) { const storage = useStorage(storageName); const data = (await storage.getItem(key)) as t; @@ -144,6 +155,18 @@ async function getFromStorage(storageName: string, key: string) { return data; } +const getFromStorageCachedBulk = defineCachedFunction( + async (storageName: string, keys: string[]) => { + return await getFromStorageBulk(storageName, keys); + }, + { + maxAge: 60 * 60 * 2, // 2 hours + name: "getFromStorageCachedBulk", + getKey: (storageName: string, keys: string[]) => + `${storageName}-${keys[0]}-${keys[keys.length - 1]}`, + }, +) as (storageName: string, keys: string[]) => Promise; + async function getFromStorageBulk(storageName: string, keys: string[]) { const storage = useStorage(storageName); const data = await storage.getItems(keys); -- 2.51.2