Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb中保持json关系_Mongodb - Fatal编程技术网

在mongodb中保持json关系

在mongodb中保持json关系,mongodb,Mongodb,如果我有3个表,比如表1、表2、表3,它们有一对多的关系,表1有40000条记录,表2有400000条记录,表3有4000000条记录。 表2通过id列与表1相关 表3按id列与表1相关 在mongo db中以更规范的方式保存文档是否更好 Table 1 { _id: "joe", name: "Joe Bookreader" } Table 2 { table1_id: "joe", street: "123 Fake Street", city: "Fake

如果我有3个表,比如表1、表2、表3,它们有一对多的关系,表1有40000条记录,表2有400000条记录,表3有4000000条记录。 表2通过id列与表1相关 表3按id列与表1相关

在mongo db中以更规范的方式保存文档是否更好

Table 1 
{
   _id: "joe",
   name: "Joe Bookreader"
}

Table 2
{
   table1_id: "joe",
   street: "123 Fake Street",
   city: "Faketon",
   state: "MA",
   zip: "12345"
}
还是应该以非规范化的方式来实现更好的性能,比如

{
   _id: "joe",
   name: "Joe Bookreader",
   address: {
              street: "123 Fake Street",
              city: "Faketon",
              state: "MA",
              zip: "12345"
            }
}

性能实际上取决于您打算如何使用/查询数据。但是mongo不是一个关系数据库,所以无论如何你不应该这样想。一般来说,最好将所有相关数据保存在一个文档中


话虽如此,只有一个名称的表1没有多大意义。我会将地址和名称一起存储。

MongoDB是一个对象存储,因此基于对象的表示通常比规范化表示更好

这里有两个考虑因素:

  • 访问模式决定存储模式。如果一个人及其地址总是一起访问,那么最好将其存储在一起

  • 可以嵌套1:1或1:N关系。M:N关系A必须存储在“规范化”对象中。在您的示例中,M:N意味着一个地址属于多个人,而一个人拥有多个地址。请记住,这不是MongoDB设计的数据结构类型,因此它有点反模式


  • 第二个更好,是MongoDB方式。不要尝试像MongoDB那样使用SQL,你会遇到很多问题,如果给定的文档有1000个地址记录,这会很慢。性能还会更好吗?只要你查询索引字段,1000个就可以了,性能也会很好。只有当您的文档增长到16MB以上时,才会出现问题,然后您将被迫将其分块。否则最好将其保存在一个文档中。确保在要查询的字段上创建了正确的索引