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



我有一种情况,我需要基于PartitionKeys和RowKeys的范围创建SAS令牌。

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

我试图从浏览器调用存储并获得一系列PK的数据(基于一些时间范围),并在这些PK中,基于一些rk的范围。即:

PK> 100000000 &&PK & lt;200000000,,RK> "aaa" &&RK & lt;"嗯"

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

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

任何想法如何使呼叫只遵循提供的RK范围,而不必过滤掉客户端上不必要的实体?

@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的连续范围,而不是我认为的过滤器查询。

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

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

最新更新