Microsoft Azure DocumentDB与Azure表存储
近年来,微软提供了一个名为“Table Storage”的“NoSQL”键/值存储( http://azure.microsoft.com/zh-cn/documentation/articles/storage-dotnet-how-to-use-tables / )
表存储提供高性能,可扩展性(通过分区)和相对较低的成本。 表的一个主要缺点是只有分区和行键可以被索引 – 所以对值进行查询是非常低效的。
最近,微软宣布了一项名为“DocumentDB”的新型“NoSQL”服务( http://azure.microsoft.com/en-us/documentation/services/documentdb/ )
DocumentDB存储一个JSON对象,而不是存储属性列表(如表格)。 整个对象被索引 – 可以根据每个属性和存储对象的任何嵌套属性创build高效的查询。
微软表示,DocumentDB也提供了高性能和可扩展性。
如果是这样 – 为什么有人会使用DocumentDB的表存储? 听起来像DocumentDB提供了与表相同的function,但具有额外的function,如索引任何东西的能力。
如果有人能比较DocumentDB和Table Storage,我会很高兴,突出每个人的利弊。
两者都是NOSql技术,但它们大不相同。 Azure Tables是一个简单的键/值存储,并不支持复杂的查询function(其中大部分需要完整的分区/表扫描,这将会降低您的性能和成本节省),自定义索引(索引基于只有PartitionKey和RowKey,你当前不能索引任何其他的实体属性,除了PartitionKey / RowKey组合以外的任何其他search都将需要分区/表扫描)或存储过程。 您也不能批量读取多个实体的请求(尽pipe支持批处理写入请求,如果所有实体都logging到同一个分区)。 有关Azure表的实际应用程序,请参阅此处 。
如果你的数据需要(特别是在查询它们的时候)很简单(就像上面的例子一样),那么Azure Tables提供你所需要的,你可能最终会因为定价,性能和存储容量而使用DocDB。 例如,Azure Tables 性能目标是每秒20.000次操作。 试图在DocDB上获得相同的性能水平将会为您带来显着更高的服务成本 。 此外,Azure表受Azure存储帐户容量( 500TB )的限制,而DocDB存储受限于您购买的容量单位。
Table Services主要是一个键值types的NOSQL,而DocumentDB(顾名思义)是一个Document Type NoSQL存储。 你所要求的基本上是这两种types的NOSQL方法之间的区别。 如果你根据这个来塑造你的研究,你应该能够更好地理解。
为了简单起见,我build议你考虑一下DocumentDB和Table Services如何定价的区别。 不仅这些服务的成本相差很多,而且DocumentDB以“先提供”模式工作,而Table Services以纯粹的基于消费的定价提供,这可能会为您提供一些比较/对比的线索。
让我问你一下; 如果Table Services中的function能够满足我的需求,为什么还要使用DocumentDB呢? ;)我build议您查看当前的Azure诊断工具如何使用Azure存储服务,如何使用存储度量标准使用Azure存储来了解Table Services的用处以及如何在某些情况下过度使用DocumentDB。
希望这可以帮助。
一个真实的例子:
我必须存储一些令牌,检索它们,删除它们。 只有查询完成将基于用户ID。
所以我使用Table Storage,因为它完美地满足了我的要求。 我保存令牌对用户ID。
文件DB似乎是矫枉过正的。
我认为这个比较是关于交易价格的。 表服务只是存储服务,似乎每秒钟处理速度为20,000,但是一直支付这种吞吐量(因为Storage总是给我们)是每月$ 1,200。 疯狂的钱。
表服务具有简单的索引,所以查询是非常有限的。 适合任何通过ID书写和阅读的内容。 DocumentDB索引整个文档,因此可以在任何属性上进行查询。
最后,Table服务受到它所在的存储帐户的存储约束(在与Microsoft直接谈判的情况下可能疯狂地高),DocumentDB存储似乎是无限的。
所以这是一个平衡。 你是否在一个地方有很多数据(数百个演出或TB)? DocumentDB。 你需要支持复杂的查询吗? DocumentDB。 你有没有需要快速的数据,但基于1对2的财产查询? 表服务。 你会交易必须围绕一个简单的索引编码,以避免通过鼻子支付吞吐量? 表服务。
而雷迪斯,有人提到那个…男人,我不知道。 即使在caching框架(Redis提供的)中存在持久性,也不会将其变成一种select的技术。持久性存储之间存在着巨大的差异,该存储持有“经常使用但可能丢失的数据”时间退休“,就像一个caching会,并持久存储,保证您的数据在那里。