【问题标题】:How collection is different from schema集合与模式有何不同
【发布时间】:2017-05-29 20:37:06
【问题描述】:

我对 cosmosdb(documentdb) 很陌生,在阅读文档时,我一直在反复阅读一件事,即 documentdb 是无模式的,但我觉得集合类似于模式,两者都是逻辑视图。

Wikipedia 将模式定义为“术语“模式”是指将数据组织作为数据库构建方式的蓝图”。我相信集合也是一样的,它是文档、存储过程、触发器和 UDF 的组织。

所以我的问题是,模式与集合有何不同?

【问题讨论】:

  • 集合不像模式那样强制执行特定类型的文档。因此,一个文档集合可以有一个带有用户数据的文档或一个带有日志数据的文档或任何其他文档。集合只是一组可能不相关的文档。一个集合就像一个数据库,一个数据库可以有多个(可能不相关的)表。但是数据库本身并不描述/强制执行存储的数据。
  • 感谢@PeterBons 听起来合乎逻辑!

标签: azure azure-cosmosdb


【解决方案1】:

集合确实与架构无关。它们只是文档的组织结构。使用 Cosmos DB,它们可以:

  • 事务边界。在集合中,您可以利用存储过程在事务中执行多个查询/更新。这些更新仅限于单个集合(更具体地说,仅限于集合中的单个分区)。
  • 计费/性能边界。 Cosmos DB 允许您指定要分配给集合的请求单位 (RU)/秒数。每个集合都可以有不同的 RU 设置。无论您消耗多少存储空间,每个集合都有最低成本(由于必须分配的 RU 数量最少)。
  • 服务器端代码边界。存储过程、触发器等被上传到特定集合。

您是选择为每个对象类型创建一个集合,还是在一个集合中存储多个对象类型,完全取决于您。并且与数据的形状无关。

【讨论】:

    【解决方案2】:

    关系数据库的架构与文档数据库的架构略有不同。简单来说,关系数据库比文档模式更严格。换句话说,RDBMS 表中的记录必须严格遵守模式,因为我们在将文档存储到 Document 集合中时具有一定的灵活性。

    通常,集合是一组遵循相同模式的文档。但是文档数据库不会阻止将具有不同模式的文档存储在单个集合中。这是它为用户提供的灵活性。

    让我们举个例子。假设我们正在存储一些客户信息。 在关系数据库中,我们可能有一些类似的结构

    Customer ID INT
    Name        VARCHAR(50)
    Phone       VARCHAR(15)
    Email       VARCHAR(255)
    

    根据客户的电子邮件或电话号码,它们将被记录为正确的值或空值。

    ID, Name, Phone, Email
    1, John, 83453452, -
    2, Victor, -, -
    3, Smith, 34535345, smith@jjjj
    

    但是在文档数据库中,如果某些列没有任何值,则需要出现在集合中。

    [
    {
      id: "123",
      name: "John",
      phone:"2572525",
    },
    {
      id: "456",
      name: "Stephen",
    },
    {
      id: "789",
      name: "King",
      phone:"2572525",
      email:"king@asfaf"
    }
    ]
    

    但是,始终建议坚持使用文档数据库中的架构,即使它们提供了将无架构文档存储到集合中以实现可维护性的灵活性。

    【讨论】:

    • 感谢@Ravi 的回答,感谢您的努力。说到重点,忘记了关系数据库,我曾在 Cassandra 及其基于模式的工作中工作过,而您指出的关于 null 值的那个,它只是 nosql 中的一个选择,与集合或模式无关,这是我的理解
    • 通常,集合是一组遵循相同模式的文档。但是文档数据库不会阻止将具有不同模式的文档存储在单个集合中。这是它为用户提供的灵活性。
    • 我不同意集合通常包含具有相同架构的文档。没有这样的约定。也许人们被教导要这样做(例如,每个对象类型一个集合),但对此没有规则,也没有约定。
    • 同意@David。您可以将任何类型的文档存储在单个集合中,并通过在文档中实现基本type 属性来使用类型/存储库模式。这是关于这种情况的related question & answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2012-10-31
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2023-01-31
    相关资源
    最近更新 更多