Microsoft Azure DocumentDB与Azure表存储

Ill*_*dan 43 azure azure-table-storage azure-cosmosdb

近几年来,微软提供了一个名为"Table Storage"的"NoSQL"密钥/值存储(http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-表/)

表存储提供高性能,可扩展性(通过分区)和相对较低的成本.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之间进行比较,我会很高兴,强调每个人的利弊.

Lui*_*ado 52

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

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

  • @Luis"他们中的大多数都需要完整的分区/表格扫描,这会破坏你的性能和节省成本" - 只有你这样设计你的表才会这样.如果您知道自己在做什么,那么就像他们没有进行全表扫描那样设计表,就像任何其他键/值NoSQL数据库一样.这也是两者之间最大的差异之一,从阅读文档来看,听起来微软会使用DocumentDB处理大部分(如果不是全部)这些内容,而对于Table Storage,您可以自行设计它. (6认同)

dar*_*dem 18

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

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

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

希望这可以帮助.

  • 当然.诊断数据是Azure现在使用的真实示例.这是你可能喜欢的另一个现实生活中的例子http://www.troyhunt.com/2013/12/working-with-154-million-records-on.html (5认同)

Cra*_*tti 6

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

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

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

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

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