【问题标题】:What are the disadvantages/advantages of having a container for each document type in cosmosdb?在 cosmosdb 中为每种文档类型创建一个容器有哪些缺点/优点?
【发布时间】:2020-07-14 00:39:07
【问题描述】:

我正在设计一个 cosmos DB 数据库,我将所有不同的文档类型保存在一个容器中,并添加了一个 type 属性来区分文档类型。我知道这种数据库建模方法的一些优点-

  • 低成本
  • 在同一分区文档中的事务支持

现在,来自 SQL 领域的上级希望我为每种类型的文档提供容器。但我不知道这种方法的优点或缺点是什么?我尝试搜索,但在任何地方都没有清楚地回答。另外,想知道我的方法有什么缺点。

【问题讨论】:

    标签: database azure-cosmosdb


    【解决方案1】:

    这样做有零优势,并且是此类数据库的反模式。 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

    点燃 2019 年会议Data modelling and partitioning in Azure Cosmos DB: What every relational database user needs to know

    【讨论】:

    • 如果共享分区键的实体之一在分区中有更多数据,是否会对性能产生影响。当系统扩展时,这种方法是否存在任何固有的瓶颈。
    • 分区的一个关键方面是数据(和请求)应该尽可能均匀地分布在分区中。 Cosmos 中的吞吐量在分区之间平均分配,因此如果您有一个分区包含大量数据(也称为热分区)而其他分区则很少,则您的运行状态不佳。可以在这里阅读更多内容,docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview
    • 我的意思是所有分区中的单一类型的文档比其他类型的数据多。
    • 是的,没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2016-09-30
    • 2023-03-28
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多