【发布时间】:2025-12-27 20:30:17
【问题描述】:
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 分钟,我已经看到如果我设计这个网站,我将拥有三个集合:
user、board、card。我会在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 列表吗?我看到了很多可能性,但什么是“最好的”?
标签: mongodb database-design database-schema trello