Firestore (NoSQL) 是社交媒体应用程序的不错选择吗?

Is Firestore (NoSQL) a good choice for social media apps?

我们正在使用 firebase 构建一个社交媒体网络应用程序,并使用 firestore 来存储用户及其 posts。

当用户喜欢 post 时,我们将其保存在 posts/{postID}/likedBy/{userID} 中,并在 post 文档中更新 totalLikes

假设我们的应用每天有 100 万用户,他们都非常频繁地喜欢病毒式 post。

现在,firebase 表示文档每秒不能处理超过一次写入。但是,我们已经看到我们可以每秒更新几次文档,但他们仍然不推荐它。

我的问题是,如果有的话,在 firestore 中存储总 post 赞的最佳方法是什么。或者,我们应该使用一些其他服务吗? 编辑:Firestore 的分布式计数器完全按照以下答案的建议制作。

另外,我只想查询那些post不被用户喜欢的

我可以查询的方法是,如果我们在 posts 集合中的文档包含所有喜欢它的用户的地图,然后 运行 地图不包含当前的查询用户身份。这种方法不好,因为它限制了 post 可以获得的点赞数量,因为 firestore 中的文档大小不能超过 1mb。

另一种方法是将喜欢的 post 保存在用户的文档中,但是这样一来,我们不仅会失去仅获取那些不喜欢的 post 的功能按用户,它还会限制用户可以喜欢的 post 的数量。

第三种方法是将喜欢post的用户存储在子集合中,这也会失去查询功能。类似的情况是将用户喜欢的 post 存储在子集合中。

现在,要么是我对 firestore(实际上是任何其他 NoSQL 数据库)的了解不够,要么我的想法是正确的,只是 NoSQL 不是为社交媒体应用程序而设计的。

Let's say our app has 1 million daily users, and they all are liking viral posts very frequently.

Now, firebase says that a document cannot handle more than one write per second.

My question is, what is the best way to store total post likes in firestore, if there's any. Or, should we use some other services?

这正是 Firebase 建议使用一些 distributed counters 的确切场景。

使用分布式计数器S,“每个计数器都是一个包含碎片子集合的文档,计数器的值是碎片值的总和。”。 =12=]

“写入吞吐量随分片数量线性增加,因此具有 10 个分片的分布式计数器可以处理的写入量是传统计数器的 10 倍。” (传统计数器=一个文档中的计数器)