mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 19:04:39 -05:00
Pre-load meta entries for all chapters for optimization (#432)
Load meta entries for all chapters in one query to prevent N+1 queries
This commit is contained in:
@@ -132,6 +132,9 @@ object Chapter {
|
|||||||
.associateBy({ it[ChapterTable.url] }, { it })
|
.associateBy({ it[ChapterTable.url] }, { it })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val chapterIds = chapterList.map { dbChapterMap.getValue(it.url)[ChapterTable.id] }
|
||||||
|
val chapterMetas = getChaptersMetaMaps(chapterIds)
|
||||||
|
|
||||||
return chapterList.mapIndexed { index, it ->
|
return chapterList.mapIndexed { index, it ->
|
||||||
|
|
||||||
val dbChapter = dbChapterMap.getValue(it.url)
|
val dbChapter = dbChapterMap.getValue(it.url)
|
||||||
@@ -156,7 +159,7 @@ object Chapter {
|
|||||||
dbChapter[ChapterTable.pageCount],
|
dbChapter[ChapterTable.pageCount],
|
||||||
|
|
||||||
chapterList.size,
|
chapterList.size,
|
||||||
meta = getChapterMetaMap(dbChapter[ChapterTable.id])
|
meta = chapterMetas.getValue(dbChapter[ChapterTable.id])
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,6 +196,15 @@ object Chapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getChaptersMetaMaps(chapterIds: List<EntityID<Int>>): Map<EntityID<Int>, Map<String, String>> {
|
||||||
|
return transaction {
|
||||||
|
ChapterMetaTable.select { ChapterMetaTable.ref inList chapterIds }
|
||||||
|
.groupBy { it[ChapterMetaTable.ref] }
|
||||||
|
.mapValues { it.value.associate { it[ChapterMetaTable.key] to it[ChapterMetaTable.value] } }
|
||||||
|
.withDefault { emptyMap<String, String>() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getChapterMetaMap(chapter: EntityID<Int>): Map<String, String> {
|
fun getChapterMetaMap(chapter: EntityID<Int>): Map<String, String> {
|
||||||
return transaction {
|
return transaction {
|
||||||
ChapterMetaTable.select { ChapterMetaTable.ref eq chapter }
|
ChapterMetaTable.select { ChapterMetaTable.ref eq chapter }
|
||||||
|
|||||||
Reference in New Issue
Block a user