繁体   English   中英

Arrays 或 Firebase Firestore 中的子集合?

[英]Arrays or subcollections in Firebase Firestore?

我创建了一个 Firebase 数据库,其结构如下:主要有 3 个 collections:用户、聊天和另一个暂时不重要的数据库。 我最初计划将类型文档存储在用户集合中,用户类型由属性组成:

uid         -> string
... (some others which are not important)
displayName -> string
chatsList   -> a SUBCOLLECTION of chat references, containing
    chat ID
    otherUserID -> the ID of the other user chatting with you
    
contacts  -> a SUBCOLLECTION of user references, containing
    user ID
    user displayName

类型聊天是这样制作的(注意聊天只在两个用户之间):

uid      -> string
user1    -> ID of one of the users in this chat
user2    -> ID of the other user
messages -> a SUBCOLLECTION of messages made of:
    uid       -> message ID
    senderID  -> user ID of who sent the message
    text      -> content of the message
    timestamp -> when was this message sent
    

因此,如果我是登录用户,我知道我的 id,如果我想与用户 id 123 聊天,我可以查询集合“users/:myID/chatsList”并找到满足的聊天参考:“otherUserID”、“== ", "123" 然后选择相关的聊天 ID 并在 Chats 集合中找到实际的聊天。

我不确定,但我知道查询很浅,所以如果我查询例如 Chats 集合,我根本不会考虑子集合 Messages,所以它应该更快?

现在的问题是:您认为这是一个好的结构,还是没有这些子集合并使用类似数组的东西更好?

如果我查询例如 Chats 集合,我根本不考虑子集合 Messages,所以它应该更快?

无论您是从 10 个文档或 10,000 个文档的集合中获取文档,Firestore 查询都很快。 唯一会使您的查询变慢的是一次查询许多文档,因为您将下载大量数据。

没有这些子集合并使用类似数组的东西会更好吗?

这完全取决于您的用例。 Firestore 文档的最大大小限制为1 MB ,因此如果对消息的数量没有限制,最好使用子集合。

使用子集合可以更轻松地:

  1. 按 ID 获取/更新/删除单个消息
  2. 对消息进行分页(获取文档时,您会获取其中的所有数据)

如果您需要上述任一功能,最好使用子集合。

请查看Firebase 实时数据库,这在定价方面听起来也是聊天应用程序的更好选择。

另结帐: 如何为聊天应用程序分片数据实时数据库?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM