【发布时间】:2014-02-04 14:39:12
【问题描述】:
我们有一个 Windows azure 表存储系统,我们有各种实体类型,它们在白天报告值,所以我们有以下分区和行键场景:
大约有 4000 - 5000 个实体。实体类型有6种,类型分布大致均匀。所以每个大约 800 左右。
ParitionKey:实体类型-日期
行键:entityId
每一行记录一个实体在特定日期的值。这目前是 JSON 序列化的。
数据很详细。
我们会在一个月或两个月内定期查看这些分区中的值,具体取决于我们的网站用户想要查看的内容。
我们遇到了一个问题,如果我们想查询一个实体一个月的数据,我们发现我们必须通过 entityId 查询 31 个分区键。
最初这很慢,但在第一次调用后结果被缓存。
不幸的是,该站点的性质是会有不同数量的不同查询,因此数据不太可能从缓存中受益。
我们显然可以使分区更大,即可能是一整周的数据,并将 rowKeys 扩展到 entityId 和 date。
还有哪些其他选项可供我选择,或者仅仅是 Windows Azure 表遭受相当高延迟的情况?
【问题讨论】:
-
不确定这是否适用于您的场景,但我们在应用程序中处理它的方式是我们将数据存储两次。第二份数据的
PartitionKey和RowKey值颠倒了,即 RowKey 值变为 PartitionKey,反之亦然。这样,如果我们要搜索特定的EntityId,我们将直接进入该分区并在那里搜索。
标签: azure azure-table-storage data-partitioning