【发布时间】:2021-10-06 04:46:28
【问题描述】:
编辑:在评论orderByChild 后,请求实际上似乎更快,但仍需要大约 15 秒才能完成。
下面是我用来从 Firebase 实时数据库中检索订单的函数的开头。它是位于我的 Cloud Functions index.js 文件中的一个函数:
function updateStatsForDay(db, day_moment, cronSpeed, devOnly) {
console.log('updateStatsForDay START', cronSpeed, devOnly);
const today = day_moment.hours(0).minutes(0).seconds(0).milliseconds(0).format('YYYY-MM-DD');
return db.ref('/orders')
// .orderByChild('event_start_date').endAt(today)// Prevent listing events in the future
.once('value', snapshot => {
console.log('updateStatsForDay orders retrieved');
这个表orders 大约只有 300 行,但是这个简单的查询有时需要长达 40 秒才能检索它们(两个控制台日志之间花费的时间)。我尝试评论 orderByChild 过滤器,认为这可能是问题所在,但请求仍然很慢。
这里有什么我遗漏的吗?
这是数据库中订单的示例:
此表为如下规则:
"orders": {
".indexOn": ["uid", "event_start_date"]
},
【问题讨论】:
-
我没有立即在该代码中看到任何会导致查询本身变慢的内容。你要下拉多少数据(看看它是否可能与带宽而不是查询速度有关)?
-
@FrankvanPuffelen 我不确定如何获取此信息,但在导出完整的订单表后,我得到了一个 598KB 的 JSON 文件。
-
“有时长达 40 秒”。如果你连续运行两次,第二次运行会更快吗?因为如果您的函数有一段时间不使用,它们可能需要一段时间才能再次启动。虽然仅仅获得这么多数据需要 40 秒(虽然它很多,而不是 那么 很多)仍然很奇怪..
-
@funkizer 在我的开发环境中,这个函数在 cron 中每分钟执行一次,所以这里应该不是问题。
-
我也没有发现任何可能导致查询速度变慢的特殊情况,但我建议您关注this 讨论 RTDB 优化的文档
标签: node.js firebase firebase-realtime-database google-cloud-functions