2011-06-12 53 views
8

我有一个Windows Azure应用程序,在该应用程序中,TableA的所有读取查询都在单个分区上为一系列rowkeys执行。有助于实现这种存储方案的分区键实际上是层次结构中对象的扁平化名称,因此分区键格式化为{root}_{child1}_{child2}_{leaf}。我可以理解,通过使用表命名中分区键的根维度(因此分区键将变为{child1}_{child2}_{leaf}),将这个大TableA分成多个表可能是有益的。具有多个分区键的一个Azure表存储表如何与具有较少分区键的多个表进行比较?

我想要做的就是尽可能快地从尽可能多的连接中提供对这些数据的快速访问。如果我能弄清楚这些限制是什么或应该是什么,这也将是不可思议的。

我的建议作出的改变更具体的问题:

  1. 本作会在可扩展性的差异,即可以在不显着完善性能的同时提供数据访问请求的数量?在同一时间?
  2. 这会对平均性能产生影响吗?潜在的表现?
+0

请张贴一些示例TPL和异步查询 – Paparazzi 2012-07-05 22:03:31

回答

10

如果每个查询都指定了一个分区键,那么这些分区分布在多少个表上并没有什么不同。换句话说,以下内容是等价的:一个表有一千个分区,一个表有一个分区有一千个表。

我认为考虑拆分为多个表的主要原因是,您可以在单个操作/事务中删除整个表,而您不能在同一个表中使用一定范围的分区。这意味着对于像日志这样的事情,在一段时间后你可能想要删除旧的日志,通常在不同的时间范围内有不同的表。

+0

有趣的,以便我明白,查询表存储的并发工作者角色的IO限制是在帐户级别? – user483679 2011-06-12 15:57:21

+1

分区级别(表+分区)和帐户级别的每秒操作数有限制。 – smarx 2011-06-13 19:36:10

6

+1对于Steve的回答。

有些事情要添加

+0

是的,非常好,谢谢你的见解。我通过测试发现了单独的并行查询(每个分区一个),但知道这实际上是正确的方法,这真是太好了。 TPL和异步查询似乎很好。我会研究多个帐户。问题是我只能拥有这么多帐户,对吧?我不清楚如何从逻辑上将我的应用程序划分为5个或多个可能会扩展的部分。 – user483679 2011-06-12 16:13:00

+0

要添加...如果我可以根据需要创建任意数量的表存储帐户,那对我来说实际上是非常有益的。高级存储帐户分区对于我们想要执行的项目类型有意义 – user483679 2011-06-12 16:17:03

+0

要添加...如果我可以根据需要创建任意数量的表存储帐户。对于我们想要执行的项目而言,高层次的存储帐户分区将在客户端级别进行。如果我们可以为每个客户分配一个独特的表存储帐户,那么我们可能会实现我们的IO可扩展性目标,并有效地将您的计费系统作为我们自己的一部分。 – user483679 2011-06-12 16:36:23

相关问题