问题描述
我正在研究spring-boot-webflux,graphql-java,kotlin,mongodb项目。
随着我的应用程序的发展,graphql的N + 1问题已经解决了。
所以我试图使用数据加载器来解决N + 1问题。
但是数据加载器没有返回缓存的值。
我的graphql:
curriculum: [courses]
我的数据库:
[
{ curriculum1: {courseIds: [1,2,3,4]}},{ curriculum2: {courseIds: [2,4,5]}}
]
使用数据加载器时,我的期望值为
[
{ curriculum1: {courses: [{course1},{course2},{course3},{course4}]}},{ curriculum1: {courses: [{course2},{course4},{course5}]}},]
但是结果是
[
{ curriculum1: {courses: [{course1},{ curriculum2: {courses: [{course5}]}}
]
当我禁用缓存时,结果就是我期望的。
可能是什么问题?
val courseBatchLoader: BatchLoader<ObjectId,Course> = BatchLoader { courseIds ->
courseRepository.findByIds(courseIds).collectList().toFuture()
}
val courseDataLoader: DataLoader<ObjectId,Course> = DataLoader.newDataLoader(courseBatchLoader)
我的DataFetching函数
fun tempCourses(): DataFetcher<CompletableFuture<List<Course>>> = DataFetcher {
val curriculum = it.getSource<Curriculum>()!!
val courseIds = curriculum.courseIds
val DataLoader = it.getDataLoader<ObjectId,Course>("course")
DataLoader.loadMany(courseIds)
DataLoader.dispatch()
}
"course": {
"loadCount": 54,"loadErrorCount": 0,"loadErrorRatio": 0.0,"batchInvokeCount": 6,"batchLoadCount": 21,"batchLoadratio": 0.3888888888888889,"batchLoadExceptionCount": 1,"batchLoadExceptionRatio": 0.018518518518518517,"cacheHitCount": 33,"cacheHitRatio": 0.6111111111111112
}
当我检查数据库查询的数量时,这就是我所期望的。(= 21,与batchLoadCount相同)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)