Use count cache only when no filter is set

This commit is contained in:
mikiher 2025-02-23 08:53:57 +02:00
parent d6b58c2f10
commit 364ccd85fe
2 changed files with 37 additions and 26 deletions

View File

@ -344,22 +344,28 @@ module.exports = {
countCache.clear()
},
async findAndCountAll(findOptions, limit, offset) {
const findOptionsKey = stringifySequelizeQuery(findOptions)
Logger.debug(`[LibraryItemsBookFilters] findOptionsKey: ${findOptionsKey}`)
async findAndCountAll(findOptions, limit, offset, useCountCache) {
const model = Database.bookModel
if (useCountCache) {
const countCacheKey = stringifySequelizeQuery(findOptions)
Logger.debug(`[LibraryItemsBookFilters] countCacheKey: ${countCacheKey}`)
if (!countCache.has(countCacheKey)) {
const count = await model.count(findOptions)
countCache.set(countCacheKey, count)
}
findOptions.limit = limit || null
findOptions.offset = offset
const rows = await model.findAll(findOptions)
return { rows, count: countCache.get(countCacheKey) }
}
findOptions.limit = limit || null
findOptions.offset = offset
if (countCache.has(findOptionsKey)) {
const rows = await Database.bookModel.findAll(findOptions)
return { rows, count: countCache.get(findOptionsKey) }
} else {
const result = await Database.bookModel.findAndCountAll(findOptions)
countCache.set(findOptionsKey, result.count)
return result
}
return await model.findAndCountAll(findOptions)
},
/**
@ -606,7 +612,7 @@ module.exports = {
}
const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll
const { rows: books, count } = await findAndCountAll(findOptions, limit, offset)
const { rows: books, count } = await findAndCountAll(findOptions, limit, offset, !filterGroup)
const libraryItems = books.map((bookExpanded) => {
const libraryItem = bookExpanded.libraryItem

View File

@ -105,22 +105,27 @@ module.exports = {
countCache.clear()
},
async findAndCountAll(findOptions, model, limit, offset) {
const cacheKey = stringifySequelizeQuery(findOptions)
if (!countCache.has(cacheKey)) {
const count = await model.count(findOptions)
countCache.set(cacheKey, count)
async findAndCountAll(findOptions, model, limit, offset, useCountCache) {
if (useCountCache) {
const countCacheKey = stringifySequelizeQuery(findOptions)
Logger.debug(`[LibraryItemsPodcastFilters] countCacheKey: ${countCacheKey}`)
if (!countCache.has(countCacheKey)) {
const count = await model.count(findOptions)
countCache.set(countCacheKey, count)
}
findOptions.limit = limit || null
findOptions.offset = offset
const rows = await model.findAll(findOptions)
return { rows, count: countCache.get(countCacheKey) }
}
findOptions.limit = limit || null
findOptions.offset = offset
const rows = await model.findAll(findOptions)
return {
rows,
count: countCache.get(cacheKey)
}
return await model.findAndCountAll(findOptions)
},
/**
@ -199,7 +204,7 @@ module.exports = {
const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll
const { rows: podcasts, count } = await findAndCountAll(findOptions, Database.podcastModel, limit, offset)
const { rows: podcasts, count } = await findAndCountAll(findOptions, Database.podcastModel, limit, offset, !filterGroup)
const libraryItems = podcasts.map((podcastExpanded) => {
const libraryItem = podcastExpanded.libraryItem
@ -323,7 +328,7 @@ module.exports = {
const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll
const { rows: podcastEpisodes, count } = await findAndCountAll(findOptions, Database.podcastEpisodeModel, limit, offset)
const { rows: podcastEpisodes, count } = await findAndCountAll(findOptions, Database.podcastEpisodeModel, limit, offset, !filterGroup)
const libraryItems = podcastEpisodes.map((ep) => {
const libraryItem = ep.podcast.libraryItem