我有一个数据结构,由一个名为“民意测验”的集合组成“民意测验”有几个随机生成身份证的文档。在这些文档中,还有一个名为“答案”的额外集合用户对这些民意测验进行投票,投票都写入“答案”子集合。我在“答案”节点上使用. runTransaction()方法,目的是这个子集合(对于任何给定的投票)不断被用户更新和写入。
我一直在阅读关于火力恢复的社交媒体结构。然而,我最近遇到了火力恢复的一个新功能,“array_contains”查询选项。
虽然上面提到的帖子讨论了社交媒体结构的“跟随”提要,但我有一个不同的想法。我设想用户向我的主投票节点写入(投票),因此创建另一个“跟随”节点,并让用户向该节点写入以更新投票计数(使用云函数),这似乎效率极低,因为我必须不断从统计投票的主节点复制。
“array_contains”查询是社交媒体结构可伸缩性的另一个实用选择吗?我的想法是:
“array_contains”查询有哪些限制?在Firebase中存储一个包含数千名用户/关注者的阵列是否可行?
我做了一个实时投票系统,下面是我的实现:
我做了一个民意测验收集,每个文档都有一个唯一的标识符、一个标题和一系列答案。
此外,每个文档都有一个名为答案的子集合,其中每个答案都有一个标题和它们自己的分片子集合中的分布式计数器总数。
示例:
polls/
[pollID]
- title: 'Some poll'
- answers: ['yolo' ...]
answers/
[answerID]
- title: 'yolo'
- num_shards: 2
shards/
[1]
- count: 2
[2]
- count: 16
我做了另一个名为投票的集合,每个文档都是userId_pollId的复合键,这样我就可以继续跟踪用户是否已经投票了。每个文档都包含投票ID、用户ID、答案ID...
创建文档时,我触发一个云函数,获取pollId和answerId,并使用事务在这个answerId的shards子集合中增加一个随机碎片计数器。
最后,在客户端,我减少民意测验每个答案的每个碎片的计数值,以计算总数。
对于以下内容,您可以使用一个名为“following”的中间人集合做同样的事情,其中每个文档都是userAid_userBid的复合键,这样您就可以轻松跟踪哪个用户在跟踪另一个用户,而不会打破firestore的限制。
“array_contains”查询是否是社交媒体结构可扩展性的另一个实用选项?
当然可以。这就是Firebase创建者添加此功能的原因。
看到你的结构,我想你可以尝试一下,但要回答你的问题。
“array_contains”查询有哪些限制?
对于存储什么类型的数据没有限制。
在Firebase中存储一个包含数千名用户/关注者的阵列是否可行?
不是实用与否,而是其他类型的限制。问题是这些文件有局限性。因此,在文档中输入的数据量方面存在一些限制。根据有关使用和限制的官方文件:
文档的最大大小:1 MiB(1048576字节)
如您所见,单个文档中的数据总量限制为1 MiB。当我们谈论存储文本时,你可以存储很多。所以在你的情况下,如果你只存储ID,我认为这不会有问题。但是IMHO,当你的数组变大时,要小心这个限制。
如果您在阵列中存储大量数据,并且这些阵列应该由许多用户更新,那么您还需要注意另一个限制。因此,每个文档每秒只能写一次。因此,如果很多用户都试图同时将数据写入/更新到同一个文档中,您可能会开始看到其中一些写入失败。所以,也要注意这个限制。
我正在尝试为一个简单的社交媒体概念创建一个简单的云Firestore数据库结构。 每个用户最多可以有一个可以随时更新的帖子(一个“最喜欢的”帖子除外)。用户“最喜欢的”版本的帖子被保存为一个单独的帖子,当用户在其当前版本的帖子上收到比最喜欢的版本更多的赞时,该帖子可以被更新。 friends子集合存储好友用户名,因此很容易按用户名创建该用户的好友列表。我假设我可以通过将朋友的documentID与
我有一个集合,我的应用程序在其中存储用户的所有帖子,数据结构如下: 现在,我想向我的用户显示这个集合的所有帖子;但是,只有当用户跟随创建帖子的人时,即帖子文档的字段适合。 我知道如果用户只关注一个人,查询集合是很简单的,也就是说,我有一个简单的子句。但是:如果我的用户关注10,000人或更多人呢?我怎么查询呢? 另外,我应该如何存储,即用户跟随的人?使用简单的数组似乎不适合我,但是使用所有其他选项
当用户导航到Likes或Comments屏幕时,他/她将分别看到用户指定帖子的Likes或Comments列表。 用这种结构能正确处理这两种情况吗?或者将评论和喜欢集合放在/posts/{userId}/userposts/{postId}/(也可以作为子集合)中会更好 Firestore可以同时执行“多个集合查询”吗?以便在我的“交互”屏幕中,我可以从按日期排序的不同集合中获取所需的数据 我很感
因此,我想创建一种社交媒体应用程序,并使用fiRest作为主数据库。 目标是创建“facebook”新闻源。 每个用户都有一个朋友列表,每个用户都可以创建帖子。 每个帖子都可以被修改为对应用程序的所有用户或用户朋友可见。所以每个用户都可以向他所有的朋友发布帖子,并向应用程序中的每个人发布帖子。 此外,用户还可以在新闻提要中“保存”他们喜欢的帖子。(类似帖子子集合) 现在在用户的新闻提要中-我如何查
我在集合中有大约30条记录,其中几乎25条包含单词。现在,当我尝试使用时,它不会返回任何东西。 下面是我的查询代码: 下面是我的Firestore截图:
当前,我想获取用户未与之交互的所有卡片。但是,这是有问题的,因为我只知道用户与之交互过的卡,所以.wherefield(usersWhoHaveSeenThisCard,arraycontains:currentUserUID)将不起作用,因为我需要一个“arraydoesnotcontain”语句,而该语句并不存在。 最后,用户不能拥有卡,所以我不能在卡文档中创建真/假布尔字段(例如:UserH