1

有没有办法使用 ATS(Azure 表存储)大约 500 个实体/秒/分区?脏读没问题。如果 in insert 不能立即用于读取,则 OK。

希望将一些大型表从 SQL 移动到 ATS。

  • 规模:由于这些表的大小正在突破 SQL Azure 的 150 GB 限制

  • 插入速度:查询速度的倒排索引。插入顺序未按表聚集索引排序,导致 SQL 表快速碎片。ATS 很可能比 SQL 具有插入优势。

  • 成本:ATS 的月成本较低。但是 ATS 的加载成本较高,为数百万行,并且由于加载的顺序不是按分区进行的,因此无法批处理。

  • 查询速度:几乎从不只在一个 partitionKey 上进行搜索。搜索将有一个 SQL 组件和零个或多个 ATS 组件。此 ATS 查询始终通过 partitionKey 并返回 rowKeys。partitionKey 的原始搜索速度很快,问题是返回实体(行)的时间。给定的 partitionKey 将平均有 1,000 个 rowKey,即 500 个实体/秒/分区时为 2 秒。但是会有一些 partitionKeys 超过 100,000 个 rowKeys,这相当于超过 3 分钟。在 SQL 中一次返回 10,000 行,并且没有查询超过 10 秒,因为连接的功能不必减少 100,000 行以在 where 中考虑这些行。

  • 是否有围绕 ATS 的选择实体速度?对于规模和插入速度想去 ATS。

Windows Azure 存储抽象及其可扩展性目标

如何充分利用 Windows Azure 表

为 Windows Azure 表存储设计可扩展的分区策略

为不会修改的查询结果关闭实体跟踪: context.MergeOption = MergeOption.NoTracking;

4

2 回答 2

2

一种潜在的解决方法是跨多个分区和/或表条带化数据,在所有(子)分区上并行执行查询并合并结果。

例如,对于跨分区的条带化,在分区键前面加上一个数字可以将分区的可伸缩性提高 10 倍。

所以一个分区键,比如 ABCDEFGH,可以被子分区 0ABCDEFGH 到 9ABCDEFGH。
对分区进行写入,前缀数字随机或以循环方式生成。读取将并行查询所有 10 个分区并合并结果。

对于跨表条带化,可以随机或以循环方式写入 N 个表中的一个,并以类似方式并行查询。

于 2012-07-11T23:38:45.110 回答
1

编辑:我最初声明限制是 ​​500 个事务/分区/秒。那是不正确的。如原始问题所述,限制实际上是 500 个实体/分区/秒。

这也适用于您计算的查询速度。如果您查询 ATS PartitionKey 并且它返回 1000 个实体,则可能只需要比返回单个实体更长的时间,也许是几百毫秒。另一方面,如果查询返回超过 1000 个实体,则速度会慢得多,因为每组 1000 行都需要一个本质上独立的事务,并且必须串行完成。

我不完全清楚你在做什么,但听起来像很多查询。请记住,在非键列上查询 ATS 往往非常慢。如果您经常这样做,那么使用 SQL Azure 联合和扇出查询可能会更好地为您服务。

于 2012-07-11T19:10:29.213 回答