2014-01-15 26 views
1

我们已经有了一个windows azure表存储系统,我们有各种实体类型在白天报告值,所以我们有以下分区和行关键方案:Windows Azure表访问延迟分区键和行键选择

大约有4000 - 5000个实体。有6种实体类型,类型大致均匀分布。所以每个人约800人。

ParitionKey:的EntityType最新

行键:ENTITYID

每一行记录值,该日期的实体。这是目前JSON序列化。

数据非常冗长。

我们会定期回顾这些分区在一个月或两个月内的值,具体取决于我们的网站用户想要查看的内容。

我们遇到了一个问题,如果我们想查询一个实体的一个月的数据,我们发现我们必须通过entityId查询31个分区键。

初始速度非常慢,但在第一次调用之后,结果被缓存。

不幸的是,网站的本质是会有不同数量的不同查询,所以数据不太可能从缓存中受益。

我们显然可以使分区更大,也许整整一周的数据并将rowKeys扩展到entityId和日期。

还有哪些其他选项对我开放,或者仅仅是Windows Azure表遭受相当高的延迟?

+0

不知道这是否适用于您的情况,但我们在应用程序中处理它的方式是我们将数据存储两次。数据的第二个副本具有“PartitionKey”和“RowKey”值反转,即RowKey值变成了PartitionKey,反之亦然。这样,如果我们想要搜索特定的'EntityId',我们直接进入该分区并在那里搜索。 –

回答

2

一些选项包括

  1. 使并联

  2. 31个查询请上的分区键范围中的单个查询,即

    分区键> =的EntityType-起始日期和分区键< = entityType-EndDate和Row key = entityId。

这可能是取决于你的数据,这个查询可能比当前的查询延迟更少。

+0

您能否提供分区密钥的格式和示例?我很想知道,为什么这不起作用。 – hocho

+0

刚刚删除该评论。工作正常。我很抱歉感到困惑。它确实工作正常,但是我需要使用ge,lte和eq。这是我混乱的根源。 –

+0

很高兴为你效劳! – hocho