Microsoft Azure DocumentDB与Azure表存储

时间:2015-03-08 15:13:22

标签: azure-table-storage azure-cosmosdb

近几年来,Microsoft提供了一个名为“表存储”的“NoSQL”键/值存储(http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/

Table Storage提供高性能,可扩展性(通过分区)和相对较低的成本。 Table的主要缺点是只能对Partition和Row键建立索引 - 因此对值进行查询效率非常低。

最近微软宣布了一项名为“DocumentDB”的新“NoSQL”服务(http://azure.microsoft.com/en-us/documentation/services/documentdb/

DocumentDB存储JSON对象,而不是存储属性列表(如Tables do)。整个对象被索引 - 因此可以基于存储对象的每个属性和任何嵌套属性创建有效的查询。

微软表示,DocumentDB也提供了高性能和可扩展性。

如果是这样 - 为什么有人会使用Table Storage而不是DocumentDB?听起来像DocumentDB提供与Tables相同的功能,但具有其他功能,例如能够索引任何内容。

如果有人可以在DocumentDB和Table Storage之间进行比较,我会很高兴,强调每个人的利弊。

5 个答案:

答案 0 :(得分:51)

两者都是NoSQL技术,但它们大不相同。 Azure Tables是一个简单的键/值存储,不支持复杂查询等复杂功能(大多数都需要完整的分区/表扫描,这会损害您的性能和节省成本),自定义索引(索引基于仅限PartitionKey和RowKey,您当前无法索引任何其他实体属性并搜索除PartitionKey / RowKey组合以外的任何内容将需要分区/表扫描)或存储过程。您也无法批量读取多个实体的请求(如果所有实体都属于同一个分区,则支持批量写入请求)。有关Azure表的实际应用,请参阅HERE

如果您的数据需求(特别是在查询它们之前)很简单(如上例所示),那么Azure Tables提供了您所需的功能,由于定价,性能和存储容量,您最终可能会使用它来支持DocDB。例如,Azure Tables performance target每秒运行20.000次。尝试在DocDB上获得相同级别的性能将会显着提高service cost。此外,Azure表受Azure存储帐户(500TB)容量的限制,而DocDB存储受限于您购买的容量单位。

答案 1 :(得分:18)

表服务主要是键值类型NOSQL,而DocumentDB(顾名思义)是Document Type NoSQL存储。您要问的是这两种NOSQL方法之间的区别。如果你根据这个调整你的研究,你应该能够更好地理解。

为了简单起见,我建议您考虑DocumentDB和Table Services的定价方式之间的差异。这些服务的成本不仅相互之间有很大差异,而且DocumentDB采用“先提供服务”模式,而基于纯消费定价的表服务可能会为您提供一些比较/对比的线索。

我问你这个问题;如果表服务中的功能很好地满足我的需求,为什么我会使用DocumentDB? ;)我建议您查看当前Azure诊断工具如何使用Azure存储服务,存储指标如何使用Azure存储本身来了解表服务的有用性以及在某些情况下DocumentDB可能有多大。

希望这有帮助。

答案 2 :(得分:6)

我认为比较是所有关于绩效的交易价格。表服务只是存储服务,似乎最高可达20,000 ops /秒,但是一直支付这种吞吐量(因为Storage一直给我们支付)是每月1,200美元。疯狂的钱。

表服务具有简单的索引,因此查询非常有限。适用于通过ID写入和读取的任何内容。 DocumentDB索引整个文档,因此可以对任何属性进行查询。

最后,Table服务受其存储帐户的存储限制的约束(在与Microsoft直接协商的情况下可能会变得疯狂),其中DocumentDB存储似乎无限制。

所以这是一个平衡点。您是否在一个地方拥有大量数据(数百演出或太字节)? DocumentDB。您需要支持复杂的查询吗? DocumentDB。您是否拥有需要快速前进的数据,但基于1对2的属性查找?表服务。您是否需要围绕一个简单的索引进行交易,以避免通过吞吐量来支付吞吐量?表服务。

而Redis,有人提到......男人,我不知道。即使在缓存框架中存在持久性(Redis提供)也不会将其变成一种选择技术......持久存储与持久存储之间存在巨大差异,这些数据“经常使用,但可能会丢失或者时间退休“,就像缓存一样,以及一个保证数据存在的持久存储。

答案 3 :(得分:4)

一个现实生活中的例子:

我必须存储一些令牌,检索它们,删除它们。只有查询完成将基于用户ID。

所以我使用Table Storage,因为它完美地满足了我的要求。我将令牌保存为用户ID。

文档数据库似乎有点矫枉过正。

答案 4 :(得分:3)

以下是microsoft's official docs

的答案

Cosmos DB,Azure表存储和Azure SQL数据库的常用属性:

  • 99.99可用性SLA

  • 完全托管的数据库服务

  • 符合ISO 27001,HIPAA和欧盟模型条款

  • 下表显示了Azure Cosmos DB的不常见属性, Azure表存储

enter image description here