集合如何与模式不同

时间:2017-05-29 07:14:06

标签: azure azure-cosmosdb

我是cosmosdb(documentdb)的新手,在阅读文档的过程中,我一直在重复阅读一件事,即documentdb是无架构的,但我觉得集合与模式类似,都是逻辑视图。

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

传统上,集合是一组遵循相同模式的文档。但是文档DB不会阻止一个人在一个集合中存储具有不同模式的文档。它为用户提供了灵活性。

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

这样的结构
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"
}
]

但是,始终建议坚持使用文档db中的模式,即使它们可以灵活地将无模式文档存储到集合中以实现可维护性。