我一直在使用Firebase RTDB,并将其迁移到Firestore。
我有与许多其他节点关联的userId。
例如,我有users
,messages
,purchases
。
要将用户与其他集合相关联,我有users_messages/$date/$userId/$messageId
,purchases/$date/$userId/$purchaseId
,因为RTDB不支持复杂的查询,并且我希望能够查询特定用户在日期范围之间的消息。
现在,我意识到在数据查询方面,firestore比RTDB更好,并且将messages
和purchases
收集到date
,user
。
在这种情况下,我应该将userId
还是整个user
文档存储在messages
和purchases
集合中?
答案 0 :(得分:1)
您可以简单地放入userId
并定义一个新集合users
,其中包含每个userId
的描述作为文档及其相关数据。
-
PS:提示,文档也可以引用集合。例如,收集->文档->收集->文档..等等。
答案 1 :(得分:1)
从广义上讲,将重复数据存储在NoSQL数据库中的最佳方法完全取决于项目的需求。没有一种适合所有人的正确解决方案。
您必须问一些有关要复制的数据的问题:
如果需要更改重复的数据并保持同步,那么您可能很难将所有重复的数据保持最新状态,并且可能会花费很多金钱来使所有这些文档保持最新状态,因为这需要读取并为每个文档写出每个更改。
如果您需要非常快速的查询,则可能希望复制更多的数据,以便客户端只需要为每个查询项目读取一个文档,而不是多个文档。但是您也许还可以依靠本地客户端缓存使此便宜,这取决于客户端必须读取的数据。
最后,对于您是否要复制某些数据的选择,它很大程度上取决于您的数据及其特征。您将不得不逐案考虑。