假设我正在创建一个交易应用程序。
我将如何存储交易?
我知道我需要非规范化。
我是否首先将交易保存在交易节点中 分贝级别?或者我会将交易节点保存在每个用户的节点下吗?或者我会将其保存在第一级的事务节点和 每个用户节点下的交易节点?
如果用户更改了姓名,我将如何反射(reflect)这些信息 用户和商家的交易历史都发生变化吗?
我觉得最好的方法是将其放在数据库的第一级,并让用户查询整个列表以查看他们的交易历史记录。
但是,如果我有很多用户,这不是会非常慢吗?
或者 firebase 是否足够智能、足够快来处理此类查询。
用户的互联网速度是否会影响此查询,尤其是在 移动设备?
您能否在加载交易时在屏幕上显示交易?
Firebase 索引可以让我轻松执行这些非常大的数据集查询吗?也许对每个交易中包含的用户用户名建立索引?
最佳答案
首先,我建议使用永远不会改变且始终唯一的userId
,而不是使用用户名
过滤交易数据的历史记录。
其次,我认为全局保存交易(不使用'/userId'
)更好。因为:
- 出于会计原因,我们需要能够汇总所有交易
- 如果您认为使用索引后查询也会很慢,您可以考虑使用
limitToFirst()
加载部分查询结果,就像 web 中的分页(android 中的无限滚动)一样。有很棒的教程here
关于Firebase 读写速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713598/