我是Node.js和Firebase的Cloud Functions的新手,我会尝试专门针对我的问题。
我有一个firebase-database,其中的对象包括“score”字段。我希望基于此检索数据,这可以在客户端轻松完成。
问题在于,如果数据库变得越来越大,我担心返回和/或消耗大量资源需要花费太长时间。这就是为什么我在考虑一个使用Cloud Functions来存储缓存的http服务,其中前N个对象会在任何对象的分数随着监听器而改变时自行更新。
然后,客户端只需要调用https://myexampleprojectroute/givemethetoplevels之类的东西来接收前N级的Json。
合理吗?如果是这样,我该如何处理?我需要哪些结构来使用此缓存,以及如何通过http?
以json格式返回它们目前我会继续做客户端,但我真的很想将它用于性能和学习目的。
提前致谢。
修改
最后我没有实现优化。原因是,首先,firebase数据库不包含“子计数”,所以我没有找到一种方法用我的新手javascript知识来实现它。其次,最重要的是,我很确定它不会扩展到数百万,最多有10K条目,而firebase有排序读取优化的规则。有关详细信息,请查看this link.
另外,我会发布一个简单的代码片段,通过使用云函数的http请求从数据库中检索数据,以防有人在寻找它。希望这有帮助!
// Simple Test function to retrieve a json object from the DB
// Warning: No security methods are being used such authentication, request methods, etc
exports.request_all_levels = functions.https.onRequest((req, res) => {
const ref = admin.database().ref('CustomLevels');
ref.once('value').then(function(snapshot) {
res.status(200).send(JSON.stringify(snapshot.val()));
});
});
答案 0 :(得分:2)
您在写入时复制数据,以获得更好的读取性能。这是一种完全合理的方法。实际上,在NoSQL数据库中保持这样的派生数据结构甚至有一个名称是非常常见的:反规范化。
要记住的一些事项: