2012-07-10 87 views
1

是否有解决ATS(Azure表存储)500个实体/秒/分区的方法?确定与脏读。如果在插入不能立即读取然后确定。Azure表存储性能的一个非常具体的表

想要将一些大表从SQL移动到ATS。

  • 规模:由于这些表的大小被碰撞SQL天青

  • 插入速度的150 GB限制:反向索引查询速度。插入顺序不是 按表聚簇索引排序,这会导致快速SQL表 分段。 ATS最有可能比SQL有插入优势。

  • 成本:ATS的月度成本较低。但是,ATS具有数百万行的更高负载成本,并且不能按照负载的顺序进行批处理。

  • 查询速度:搜索几乎从不在一个partitionKey上。搜索将有一个SQL组件和零个或多个ATS组件。这个ATS查询总是通过partitionKey并返回rowKeys。对partitionKey的原始搜索很快,问题是返回实体(行)的时间。一个给定的partitionKey平均有1000个rowKeys,它是500个实体/秒/分区的2秒。但是会有一些分区键超过10万个rowKeys,相当于超过3分钟。一次返回10000行,SQL中不返回任何查询,因为连接的权力不需要减少100,000行以在where中考虑这些行。

  • 是否有围绕此选择实体速度与ATS?对于刻度和插入速度想要去ATS。

Windows Azure Storage Abstractions and their Scalability Targets

How to get most out of Windows Azure Tables

Designing a Scalable Partitioning Strategy for Windows Azure Table Storage

打开实体跟踪断为没有将要被修改的查询的结果: context.MergeOption = MergeOption.NoTracking;

回答

2

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

例如,对于跨分区的分条,将分区键预先设置为单个数字可以使分区的可伸缩性倍数增加10倍。

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

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

+0

谢谢,直线X:1不符合数据,但我明白了。一些partitionKeys将有1个rowKey和大约100万个。需要一个基于rowKey计数生成新分区键的智能插入。回到500 /实体/秒限制。理解可以使用另一个表来管理计数而不是实际计数。 500仍然限制了迁移。如果那500人是5000人,那么我认为这种方法会让我受益。不会标记为答案(但),但我已经投了很多答案,并再次感谢。 – Paparazzi 2012-07-12 15:09:14

+0

@Blam - 是的,你明白了,正如你所提到的,如果每个分区的行数变化很大,这可能不是非常有效/有效。 另一种方法可能是使用双存储 - Azure SQL和blob。 Azure SQL将成为主要的存储空间,blob是次要的。后台进程会根据使用情况/老化情况将行移出SQL数据库并移入每个分区的blob。在查询时,可以并行查询SQL和blob,并将结果合并。 – hocho 2012-07-14 22:42:31

+0

SQL插入速度是我需要摆脱的。经过两小时的碎片碎片后,我希望每秒插入500次。我可能会走相反的方向并将其索引到ATS,然后合并到SQL中。 – Paparazzi 2012-07-15 01:55:07

1

编辑:我原先声明的限制是500个交易/分区/秒。这是不正确的。正如原始问题所述,限制实际上是500个实体/分区/秒。

这也适用于您计算的查询速度。如果您查询ATS PartitionKey并返回1000个实体,那么这可能只比返回一个实体花费更长的时间,也许几百毫秒。另一方面,如果查询返回的实体数量超过1000个,那么将会减慢太多,因为每组1000行需要基本上独立的事务并且必须以串行方式完成。

我不完全清楚你在做什么,但这听起来像是很多的查询。请记住,在非关键列上查询ATS往往非常缓慢。如果你正在做很多事情,你可能会更好地使用SQL Azure Federations和扇出查询。

+0

好吧,SQL可能会更好。请给我看500个交易/分区/秒的链接。我看到500个实体/分区/秒的非常具体的参考。查看我添加到问题的链接。在第二个环节,即使批量使用也不能超过500个实体。从单个分区来的是1000行是一个事务。搜索在partitionKey上并返回rowKey。为什么我需要SQL Azure Federation。 – Paparazzi 2012-07-11 20:41:41

+0

你对可扩展性目标是正确的。我记得那些测量的错误。谢谢你让我挺直。我建议SQL Azure Federations,因为那样可以让你将SQL Azure扩展到更大的数据容量,这是评估ATS的原因之一。 – 2012-07-11 21:49:45

+0

奇怪的是读取,插入,更新,批量插入和批量更新的限制相同。显然有一些节流正在进行。由于没有人从MSFT得到答复,我得到的印象是非常艰难的油门,并且它不会很快消失。 – Paparazzi 2012-07-11 22:12:46