集合与架构有何不同

How collection is different from schema

我是 cosmosdb(documentdb) 的新手,在浏览文档时我一直在反复阅读一件事,即 documentdb 是无架构的,但我觉得集合类似于架构,两者都是逻辑视图。

Wikipedia 将架构定义为 'The term "schema" refers to the organization of data as a blueprint of how the database is constructed'。我相信集合也是一样的,它是文档、存储过程、触发器和 UDF 的组织。

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

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

通常,集合是一组遵循相同模式的文档。但是文档数据库并不能阻止人们在单个集合中存储具有不同模式的文档。这是它给用户带来的灵活性。

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

这样的结构
Customer ID INT
Name        VARCHAR(50)
Phone       VARCHAR(15)
Email       VARCHAR(255)

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

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"
}
]

然而,始终建议坚持文档数据库中的模式,即使它们提供了将无模式文档存储到集合中以实现可维护性目的的灵活性。

集合确实与架构无关。它们只是文档的组织结构。在 Cosmos DB 中,它们充当:

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

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