具有PK和RK范围的Azure表存储的共享访问签名

时间:2015-06-02 16:39:10

标签: azure cors azure-table-storage

我遇到一种情况,我需要根据一系列的PartitionKeys和RowKeys创建一个SAS令牌。

更确切地说,我的PK基于时间戳的Ticks(每10分钟范围有一个分区)。我的RK基于一些字符串。

我正在尝试从浏览器调用存储并获取一系列PK的数据(基于某个时间范围)以及这些PK中的数据,基于一些RK的范围。 IE:

PK> 100000000&& PK< 200000000&& RK> “aaa”&& RK<“mmm”

当我创建令牌时,来自存储的响应返回正确的分区,但所有 RK的实体。

            var sas = table.GetSharedAccessSignature(new SharedAccessTablePolicy
                                              {
                                                  Permissions = SharedAccessTablePermissions.Query,
                                                  SharedAccessExpiryTime = DateTime.UtcNow.Add(period)
                                              }, null, startPk, startRk, endPk, endRk);

任何关于如何拨打电话的想法都遵循RK范围,而我不必过滤掉客户端不必要的实体?

2 个答案:

答案 0 :(得分:3)

@GauravMantri向我指了一篇有用的文章:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-table-sas-shared-access-signature-queue-sas-and-update-to-blob-sas.aspx

我不想支持我尝试做的事情。 PK / RK范围给出了从启动PK / RK到结束PK / RK的连续范围,而不是我想到的过滤查询。

答案 1 :(得分:0)

请注意,由于您要设置的“仅附加”模式,您的分区键模式可能会导致性能下降:https://azure.microsoft.com/en-us/documentation/articles/storage-performance-checklist/#subheading28

Azure存储了解您的使用模式,并根据负载自适应地调整分区分布。因此,如果您有多个分区键的负载,那么它可以在内部将这些分区拆分到不同的服务器,以平衡您的负载。但是,如果加载全部在一个分区上,并且该分区会定期更改(就像仅使用附加模式一样),那么自适应负载平衡逻辑将无效。为避免这种情况,如果您的查询模式允许,则应避免使用日期或日期时间作为分区键。