Microsoft Azure DocumentDB 与 Azure Table 存储

Microsoft Azure DocumentDB vs Azure Table Storage

最近几年,Microsoft 提供了一种 "NoSQL" key/value 存储,称为 "Table Storage" (http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/)

Table 存储提供了高性能、可扩展性(通过分区)和相对较低的成本。 Tables 的一个主要缺点是只能索引分区和行键 - 因此对值进行查询效率非常低。

最近 Microsoft 宣布了一项新的 "NoSQL" 服务,名为 "DocumentDB" (http://azure.microsoft.com/en-us/documentation/services/documentdb/)

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

Microsoft 表示 DocumentDB 也提供高性能和可伸缩性。

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

如果有人能对 DocumentDB 和 Table 存储进行比较,我会很高兴,突出显示每一个的缺点和优点。

Table 服务主要是键值类型的 NOSQL,而 DocumentDB 是(顾名思义)文档类型的 NoSQL 存储。您要问的本质上是这两种 NOSQL 方法之间的区别。如果你根据这个来塑造你的研究,你肯定能够更好地理解。

为了简单起见,我建议您考虑 DocumentDB 和 Table 服务的定价方式之间的差异。不仅这些服务的成本彼此相差很大,而且 DocumentDB 在 "provision first" 模型上工作并且 Table 服务是基于纯粹基于消费的定价这一事实可能会给您一些线索 compare/contrast.

让我问你这个;如果 Table 服务中的功能可以很好地满足我的需求,我为什么要使用 DocumentDB? ;) 我建议您看一下当前的 Azure 诊断工具如何使用 Azure 存储服务,存储指标如何使用 Azure 存储本身来了解 Table 服务的用处以及 DocumentDB 的杀伤力如何在某些情况下。

希望对您有所帮助。

两者都是 NoSQL 技术,但它们有很大的不同。 Azure Tables 是一个简单的 Key/Value 存储,不支持复杂查询等复杂功能(其中大多数都需要完整 partition/table 扫描,这会降低您的性能和成本节约),自定义索引(索引仅基于 PartitionKey 和 RowKey,您目前无法在任何其他实体 属性 上建立索引,搜索 PartitionKey/RowKey 组合以外的任何内容都需要 partition/table 扫描)或存储过程.您也不能为多个实体批量读取请求(如果所有实体都属于同一分区,则支持通过批量写入请求)。有关 Azure 表的实际应用,请参阅 HERE

如果您的数据需求(特别是关于查询它们)很简单(如上例所示),那么 Azure 表会提供您所需要的,由于定价、性能和存储,您最终可能会使用它来支持 DocDB容量。例如,Azure Tables performance target is 20.000 operations per second. Trying to get that same level of performance on DocDB will have a significantly higher service cost for you. Also, Azure tables are limited by the capacity of your Azure storage account (500TB),而 DocDB 存储受限于您购买的容量单位。

一个真实的例子:

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

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

Document DB 似乎太过分了。

我认为比较是所有关于以价格换性能。 Table 服务只是存储服务,似乎上限为 20,000 ops/second,但一直为这种吞吐量付费(因为存储一直为我们提供)是每月 1,200 美元。疯狂赚钱。

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

进行查询

最后,Table 服务受其所在存储帐户的存储限制约束(如果直接与 Microsoft 协商,可能会变得非常高),其中 DocumentDB 存储似乎是无限的。

所以这是一个平衡点。您是否在一个地方需要大量数据(数百个演出或 TB)?文档数据库。您需要支持复杂的查询吗?文档数据库。您是否有数据需要快速来去,但基于 1 对 2 属性 查找? Table 服务。您是否会不得不围绕一个简单的索引进行编码以避免为吞吐量付出高昂的代价? Table 项服务。

还有 Redis,有人提到过……伙计,我不知道。即使缓存框架(Redis 提供)中持久性的存在也​​不会将其变成一种技术选择......保存 "often used, but may be missing or time-retired" 数据的持久性存储与缓存之间存在巨大差异会,以及保证您的数据存在的持久性存储。

这是来自microsoft's official docs

的回答

Cosmos DB、Azure Table 存储和 Azure SQL 数据库的共同属性:

  • 99.99 可用性 SLA

  • 完全托管的数据库服务

  • 符合 ISO 27001、HIPAA 和欧盟示范条款

  • 下面table展示了Azure Cosmos DB的不常用属性, Azure Table 存储