MongoDB 架构设计

MongoDB schema design

我计划在 MongoDB 中实现这个模式,我一直在阅读一些关于模式设计的资料,我的想法是,每当你像关系数据库一样构建你的数据时,你一定做错了什么。

我的问题:

谢谢

您的 collection 大小不限于 16MB,正如其中一条评论所指出的,您可以检查 in the MongoDB manual 它是最大的文档大小。所以没有必要在不同的 collection 之间分离相同的 class 数据,事实上,这样做会让你很头疼:) 一个 user collection,一份给你的 server,一份给你的 server_log。然后,您可以使用 id 字段创建从一个 collection 到下一个的引用。

这是否是一个好的设计将取决于您的查询。一般来说,你想避免在 Mongo 中使用连接(它们仍然是可能的,但如果你正在做一堆连接,你使用它是错误的,并且真的应该使用关系数据库 :-)

例如,如果您的大部分查询都在 server_log 集合上并且只使用该集合中的字段,那么您会没事的。 OTOH,如果您的 server_log 查询也总是需要从服务器集合中提取数据(例如 name 和 userId 字段),那么有选择地对该数据进行反规范化可能是值得的。这是一种奇特的说法,您可能希望将 name 和 userId 字段复制到您的 server_log 文档中,这样您的查询就可以避免必须加入服务器集合。当然,每次非规范化都会增加应用程序的复杂性,应用程序现在必须确保数据在多个集合中保持一致(例如,当您更改服务器名称时,您必须确保在 server_logs)。

您可能希望列出您希望执行的查询,看看它们是否可以通过与您当前架构的最少连接来完成。如果没有,看看是否有一点非规范化会有所帮助。如果您到了需要执行大量连接或大量手动管理非规范化数据以满足查询的地步,那么您可能需要重新考虑您的模式甚至您对数据库的选择。

what should I do when collection size gets larger than 16MB limit

在 Mongodb 中,集合大小没有限制。每个文档都存在限制。每个文档的大小不应超过 16 MB。

Do you see any potential issues with my design?

以上设计没有问题