【发布时间】:2017-07-17 17:45:09
【问题描述】:
我正在使用 Azure DocumentDB,我在 NoSql 方面的所有经验都在 MongoDb 中。我查看了定价模型,成本是每个收藏品。在 MongoDb 中,我会为我正在使用的东西创建 3 个集合:用户、公司和电子邮件。我注意到这种方法每月每次收集的费用为 24 美元。
与我一起工作的人告诉我,我做错了。我应该将所有这三个东西都存储在一个集合中,并带有一个字段来描述数据类型是什么。每个集合都应该按日期或地理区域相关联,以便世界的一个部分有更小的部分可供搜索。 并:
"将不同类型的文档组合成一个集合并添加 一个字段,用于在搜索中将它们分开,如类型字段或 东西”
我从来没有想过在 Mongo 中这样做,因为它会使索引、分片键和其他事情变得难以正确。
对象之间可能没有重叠的字段(例如:电子邮件和公司对象)
我可以这样做,但我似乎找不到任何其他人这样做的例子 - 这向我表明这可能是不正确的。现在,我不需要一个例子,但是有人可以指出我的某个位置,该位置描述了哪个是“正确”的方法吗?或者,如果您确实为所有数据创建了一个集合 - 除了 Azure 的定价模型,这样做的优点/缺点是什么?
有没有关于 DocumentDb 架构设计的好文章?
【问题讨论】:
-
没有“正确”或“错误”的方式(尽管你的同事告诉你)。话虽如此:人们一直将内容组合到单个集合中,包括使用 MongoDB(不知道为什么您不会想到这一点,或者为什么这会使索引变得更加困难;索引是基于每个属性的)。借助 CosmosDB,您可以优化成本,并允许您在单个事务中访问异构数据。
-
我不会梦想将入站电子邮件和用户或公司放在一个集合中。我会怎么称呼这个系列? “熔炉”?我的意思是,数据甚至以什么方式相关?电子邮件确实有电子邮件地址,并且可能映射到用户,但这似乎不是一个好的技术。另外,你会如何分片?您将在两个对象的每个字段上都有一个索引。
-
另外,这个问题更多地与寻找一个好的资源来阅读有关如何设计 DocumentDB 架构的信息 - 显示每个架构的优缺点,而不是专门寻找“X 是正确的答案”跨度>
-
这就是为什么这个问题是题外话。需要围绕您的特定需求进行良好的讨论,并且可能需要重新思考集合的概念。另外:教程/参考推荐问题是题外话。
-
把逻辑分区(每个都有自己唯一的分区键)想象成一个表,把集合想象成一个包含多个表/分区的数据库。您越能将查询定位在特定分区,它们就会越快越便宜(跨分区查询会慢很多)。在 SQL Server 中进行分区可能有些困难,Azure 上的数据库的最小大小为 100GB,而在 Cosmos DB 上,逻辑分区的最大大小目前为 10GB。
标签: azure azure-cosmosdb nosql