【发布时间】:2020-07-14 00:39:07
【问题描述】:
我正在设计一个 cosmos DB 数据库,我将所有不同的文档类型保存在一个容器中,并添加了一个 type 属性来区分文档类型。我知道这种数据库建模方法的一些优点-
- 低成本
- 在同一分区文档中的事务支持
现在,来自 SQL 领域的上级希望我为每种类型的文档提供容器。但我不知道这种方法的优点或缺点是什么?我尝试搜索,但在任何地方都没有清楚地回答。另外,想知道我的方法有什么缺点。
【问题讨论】:
我正在设计一个 cosmos DB 数据库,我将所有不同的文档类型保存在一个容器中,并添加了一个 type 属性来区分文档类型。我知道这种数据库建模方法的一些优点-
现在,来自 SQL 领域的上级希望我为每种类型的文档提供容器。但我不知道这种方法的优点或缺点是什么?我尝试搜索,但在任何地方都没有清楚地回答。另外,想知道我的方法有什么缺点。
【问题讨论】:
这样做有零优势,并且是此类数据库的反模式。 NoSQL 数据存储中的数据应围绕其访问方式进行组织。 50 年前,当关系数据库首次出现时,规范化以优化存储是有意义的。但如今,与计算相比,存储成本更低。
简单的经验法则。如果不同的实体可以自然地共享相同的分区键,请将其存储在同一个容器中,特别是如果需要在同一个请求中访问数据时。这降低了访问成本,因为您可以在单个请求(查询)中访问所需的所有数据。如果数据存储在多个容器中,您需要向每个容器发出请求。这既慢又昂贵。
有很多内容解释了这些概念以及为什么不像关系数据库那样使用 Cosmos DB。我强烈建议您的上级查看下面的链接。在使用 Cosmos DB 等数据库之前了解这些概念非常重要。
Data modeling in Azure Cosmos DB
How to model and partition data on Azure Cosmos DB using a real-world example
【讨论】: