2017-05-29 79 views
0

我对cosmosdb(documentdb)非常陌生,在阅读文档时,我一直反复阅读一件事情,即documentdb是无模式的,但我觉得像集合类似于模式并且都是逻辑视图。集合与模式不同如何集合

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

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

+1

集合不像模式那样强制执行特定类型的文档。因此,一个文档集合可以包含具有用户数据的文档或具有日志数据或任何文档的文档。收集只是一组可能无关的文件。集合就像一个数据库,一个数据库可以有多个(可能不相关的)表。但是数据库本身并不描述/强制存储什么数据。 –

+0

谢谢@PeterBons听起来合乎逻辑! – lambodar

回答

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, [email protected] 

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

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

但它始终是最好坚持在文档数据库的模式是,即使他们的可维护性目的提供灵活存储架构少文档的集合。

+0

感谢您的回答@Ravi,我感谢您的努力。来指出,忘记关系数据库,我曾在卡桑德拉和它的基于模式的工作,和你指出关于空值的那个,它只是在nosql中的一个选择,并且与集合或模式无关是什么我的基本信息 – lambodar

+0

传统上集合是一组遵循相同模式的文档。但是,文档数据库不会停止将具有不同模式的文档存储在单个集合中。这是它给用户的灵活性。 –

+1

我不同意集合通常包含具有相同模式的文档。没有这样的约定。也许人们被教导要做到这一点(例如每个对象类型一个集合),但是对此没有规定,也没有规定。 –

2

集合实际上与模式无关。它们只是一个文件的组织结构。使用Cosmos DB,它们可以作为:

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

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