Trello 如何在 MongoDB 中存储数据? (每板收集?)

Posted

技术标签:

【中文标题】Trello 如何在 MongoDB 中存储数据? (每板收集?)【英文标题】:How does Trello store data in MongoDB? (Collection per board?) 【发布时间】:2012-10-09 18:41:02 【问题描述】:

Trello 如何在 MongoDB 中存储他们的数据(卡片)?

我读到 (How does Trello show history so quickly?) 他们的 Actions 集合是最大的集合。因此,我假设他们不会将所有卡片存储在一个巨大的集合中。

唯一的其他合乎逻辑的解决方案似乎是每个板或每个用户的集合。但是他们有很多用户,我读到 (http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections) 集合的数量是有限制的,有些人建议不要使用大量的集合。

我希望 Trello 团队的某个人能回答这个问题,我希望也能从一般社区中获得一些解决此类问题的想法。

【问题讨论】:

为什么他们不将所有数据存储在一个集合中并在他们查询的内容上进行分片,这样您将有效地一次只查询一台计算机,使查询几乎与一个小集合一样快,添加到顶部他们可能也将数据 ping 到其他区域,以便响应时间保持一致,不久之后您就获得了数十亿行的完全可扩展的集合。您还必须记住锁是 db 级别的,所以如果他们要使用多个东西,那么使用多个 DB 会很麻烦。 @Sammaye 我不明白“他们查询的内容的碎片”部分。您可以查看板中的所有卡,按卡名搜索所有板,...我了解分片的基本原理,但我不明白如何完成您所说的。能否请您再解释一下。 好吧,我现在只使用 trello 10 分钟,我已经看到如果我设计这个网站,我将拥有三个集合:userboardcard。我会在board_id 上对board 进行分片,因为需要许多用户可以访问一个板。这样,当您查询用户(在_id,username,email 上分片)然后获取他们所有可以向外扩展的板时。板的列表将嵌入板行中,而不是卡片。这些卡片可能会在 board_id 和 timestamp 以及 user_id 上分片。那是我的第一个 10 分钟一瞥 对于搜索,他们可能不使用 MongoDB,我自己的视频网站使用 Sphinx,因为 MongoDB 并不令人惊叹,而且 FTS 索引存储和效率。话虽如此,对于单个列表或板上的本地化搜索,他们可能会使用此处描述的想法:mongodb.org/display/DOCS/Full+Text+Search+in+Mongo @Sammaye 在 trello 中,每个用户在看板中都有一个角色(权限)。那么你会在每个用户中存储嵌入参与 board_id, role 吗?这样获取一个用户的所有看板会很容易,但是如果你想获得一个看板的所有用户,你必须查询用户的集合以查看他们是否参与了该 board_id。或者您还会在每个板上维护一个 user_ids 列表吗?我看到了很多可能性,但什么是“最好的”? 【参考方案1】:

Trello 将所有卡片存储在一个集合中。集合在卡片的 board id 上分片。

【讨论】:

你知道什么时候需要分片吗?我对 MongoDB 比较陌生,正在制作一个可能需要扩展的应用程序。

以上是关于Trello 如何在 MongoDB 中存储数据? (每板收集?)的主要内容,如果未能解决你的问题,请参考以下文章

Redis 如何在 Trello 中使用?

Mongoose/Mongodb 类似 trello 的基本方案问题,在 vue 中呈现

Trello 如何如此迅速地展示历史?

如何获取 Trello 列表中最重要的卡片的某些信息?

我应该如何在 mongodb / nosql 中存储数据?

如何使用 nodejs / express 将数据存储在 mongodb 中?