Database design MongoDB:存储和存储;何时使用关系
我是MongoDB的新手,所以请容忍我 我有两个问题: 首先,采取以下措施:Database design MongoDB:存储和存储;何时使用关系,database-design,mongodb,document-database,Database Design,Mongodb,Document Database,我是MongoDB的新手,所以请容忍我 我有两个问题: 首先,采取以下措施: // add a record $obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" ); MongoDB是否将“title”和“author”存储为该集合中该对象每个条目的文本?还是创建一个模式并将其转换为字段号(或者什么都不做,只存储数据) 我的第二个问题是:什么时候应该使用“关系”?假设我有100个分销商
// add a record
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
MongoDB是否将“title”和“author”存储为该集合中该对象每个条目的文本?还是创建一个模式并将其转换为字段号(或者什么都不做,只存储数据)
我的第二个问题是:什么时候应该使用“关系”?假设我有100个分销商,每个分销商包含(对象方面的)1000个客户,每个客户有10个项目。这使得一个巨大的整体对象可以操纵
在SQL世界中,这些都是相关的“对象”。在文档世界中,我们试图通过嵌入子对象来存储完整的对象
然而,这可能很难实现。这方面的最佳做法是什么?有人能给我指一个指南吗
谢谢
MongoDB是否存储“标题”和
“作者”作为每一个人的文本
将此对象输入此
收藏
MongoDB是无模式的——因此答案很明显:是的,因为没有模式
我的第二个问题是:什么时候应该
“关系”可以用吗?假设我有
100名经销商,其中包括
(对象方面)每个客户端1000个,以及
每个客户有10个项目。那个
使一个巨大的整体对象
操纵
请查收
您可以选择嵌入文档、数据库引用或多个查询。MongoDB字段是否为此集合中的每个条目命名? 是的,MongoDB确实存储每条记录的文本。在实践中,如果磁盘空间是一个限制因素,这通常不是太大的问题,您可能需要考虑其他事项。 什么时候应该使用“关系”? 这与其说是一门科学,不如说是一门艺术。这是一个很好的参考,但这里有一些事情需要考虑:
- 尽可能多地投入 文档数据库的乐趣在于它消除了大量的连接。您的第一反应应该是尽可能多地在单个文档中放置内容。因为MongoDB文档具有结构化,而且您可以在该结构中高效地进行查询,所以不需要像在SQL中那样立即规范化数据。特别是,任何与其父文档无关的数据都应该是同一文档的一部分
- 可从多个位置引用到其自身集合中的分离数据 这与其说是一个“存储空间”问题,不如说是一个“数据一致性”问题。如果多条记录引用同一数据,则更新单个记录并在其他位置保留对该记录的引用会更高效,也不容易出错
- 文档大小注意事项 MongoDB对单个文档施加4MB大小限制。在一个GB数据量的世界里,这听起来很小,但同时也是3000万条推特或25万条典型的堆栈溢出答案或20张闪烁的照片。另一方面,这是比一个典型的网页上一次可能要显示的信息多得多的信息。首先考虑什么会使你的查询更容易。在许多情况下,对文档大小的关注将是过早的优化 在您给出的示例中,我将创建3个单独的集合,因为我不需要了解其他9个项目来创建项目列表。我将保持查询的简单性。(但请参见底部的Protip)
- 复杂的数据结构: MongoDB可以存储任意深度嵌套的数据结构,但不能有效地搜索它们。如果数据形成树、林或图,则实际上需要将每个节点及其边存储在单独的文档中。(注意,对于这种类型的数据,有专门设计的数据存储,也应该考虑)
- 数据一致性 MongoDB在效率和一致性之间进行权衡。规则是,对单个文档的更改总是原子的,而对多个文档的更新永远不应该被认为是原子的。也无法在服务器上“锁定”记录(您可以使用例如“锁定”字段将其构建到客户机的逻辑中)。设计模式时,要考虑如何保持数据一致性。通常,文档中保存的内容越多越好
像这样的技巧可以减少1+n查询情况。Yes,
title
和author
作为文本存储在数据库中。根据您使用的语言/驱动程序/包装器,通常可以重新映射该字段,以便该字段在数据库中为t
,但从对象访问时为title
。从关系的角度来看,你通常会发现你必须为“某些东西”进行优化。没有单一的“最佳方式”。下次请将您的问题拆分为单独的stackoverflow问题。请注意,MongoDB的最新版本现在高达16MB。这是1.8.0版。因此,如果您正在启动一个新项目,16MB将成为您的“新”最大容量。我们被建议不要将文档设置得太大,因为这可能会影响性能。这是一个糟糕的建议吗?克拉夏洛特:再一次,在你的问题中,艺术多于科学。在执行连接时,MongoDB的性能不如SQL数据库。抓取一堆文档比检索一个大文档要糟糕得多。另一方面,如果你很少需要