Node.js MongoDB模式设计

Node.js MongoDB模式设计,node.js,mongodb,database-schema,database,Node.js,Mongodb,Database Schema,Database,我计划在MongoDB中实现这个模式,我一直在阅读一些关于模式设计的书籍,我的想法是,无论何时,只要你像关系数据库一样构建数据,你一定是做错了什么 我的问题是: 当集合大小超过16MB限制时,我应该怎么做? app_log in server_日志集合在某些情况下可能会增长到16MB以上,具体取决于服务器的繁忙程度 我知道我可以使用cap功能,但要求将所有日志存储90天 你觉得我的设计有什么潜在的问题吗 让应用程序检查集合大小并按天/小时等创建新集合以适应日志大小的增长是否是一种好做法 谢

我计划在MongoDB中实现这个模式,我一直在阅读一些关于模式设计的书籍,我的想法是,无论何时,只要你像关系数据库一样构建数据,你一定是做错了什么

我的问题是:

  • 当集合大小超过16MB限制时,我应该怎么做? app_log in server_日志集合在某些情况下可能会增长到16MB以上,具体取决于服务器的繁忙程度

    我知道我可以使用cap功能,但要求将所有日志存储90天

  • 你觉得我的设计有什么潜在的问题吗

  • 让应用程序检查集合大小并按天/小时等创建新集合以适应日志大小的增长是否是一种好做法

谢谢

您的集合大小没有限制为16MB,正如其中一条评论所指出的,您可以检查它是否是最大的文档大小。因此,不需要在不同的集合之间分离同一类数据,事实上,这样做会让您非常头疼:)一个
用户
集合,一个用于
服务器
s,一个用于
服务器日志
s。然后,您可以使用
id
字段创建从一个集合到下一个集合的引用。

您的集合大小不限于16MB,正如其中一条注释所指出的,您可以检查它是否是最大的文档大小。因此,不需要在不同的集合之间分离同一类数据,事实上,这样做会让您非常头疼:)一个
用户
集合,一个用于
服务器
s,一个用于
服务器日志
s。然后,您可以使用
id
字段创建从一个集合到下一个集合的引用。

这是否是一个好的设计取决于您的查询。一般来说,您希望避免在Mongo中使用联接(它们仍然是可能的,但是如果您正在进行一系列联接,那么您使用它是错误的,并且确实应该使用关系数据库:-)

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


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

这是否是一个好的设计将取决于您的查询。一般来说,您希望避免在Mongo中使用联接(它们仍然是可能的,但是如果您正在进行一系列联接,那么您使用它是错误的,并且确实应该使用关系数据库:-)

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

您可能希望列出您希望执行的查询,并查看是否可以使用与当前模式的最少联接来完成这些查询。如果没有,看看一点反规范化是否会有所帮助。如果为了满足您的查询,您需要执行一系列连接或大量非规范化数据的手动管理,那么您可能需要重新考虑您的模式,甚至您对数据库的选择

当集合大小超过16MB限制时,我应该怎么做

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

你觉得我的设计有什么潜在的问题吗

以上设计没有问题

当集合大小超过16MB限制时,我应该怎么做

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

你觉得我的设计有什么潜在的问题吗


以上设计没有问题

您好,我对MongoDB做得不多,但我认为16MB的限制是每个文档,而不是每个集合。为了保留日志文件,您可以清除此集合并在90天内使用db备份此server1和server2集合是什么?可能应该将server1和server2嵌入到用户集合中。您需要回答的一个基本问题是如何查询数据。您将不会像在关系数据库中那样奢侈地使用连接。您好,我对MongoDB做得不多,但我认为16MB的限制是每个文档,而不是每个集合。用于保留您需要的日志文件