在 Azure 表存储中,是否可以使用 StartsWith 或其他一些运算符(例如包含等)查询 PartitionKey。
我知道我可以使用 RowKeys 来做到这一点,但是否可以使用 PartitionKeys 来做到这一点?
一个后续问题是:即使可行,是否可取?PartitionKey 是否应该始终完全匹配——比如说,出于性能原因?
在 Azure 表存储中,是否可以使用 StartsWith 或其他一些运算符(例如包含等)查询 PartitionKey。
我知道我可以使用 RowKeys 来做到这一点,但是否可以使用 PartitionKeys 来做到这一点?
一个后续问题是:即使可行,是否可取?PartitionKey 是否应该始终完全匹配——比如说,出于性能原因?
这是一个使用GreaterThanOrEqual
andLessThan
运算符的示例,作为目标列名称的扩展。
过滤器结合了两个部分:
例如,startsWith
前缀“CAR”将准备类似s >= "CAR" && s < "CAS"
.
public static string GetStartsWithFilter(this string columnName, string startsWith)
{
var length = startsWith.Length - 1;
var nextChar = startsWith[length] + 1;
var startWithEnd = startsWith.Substring(0, length) + (char)nextChar;
var filter = TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition(columnName, QueryComparisons.GreaterThanOrEqual, startsWith),
TableOperators.And,
TableQuery.GenerateFilterCondition(columnName, QueryComparisons.LessThan, startWithEnd));
return filter;
}
用法:
var query = new TableQuery<MyTableEntity>().Where(myColumnName.GetStartsWithFilter(prefix));
在 Azure 表存储中,是否可以使用 StartsWith 或其他一些运算符(例如包含等)查询 PartitionKey。
不可以,不能对 Azure 表使用 StartsWith 或 Contains 查询运算符进行查询。要模拟StartsWith
,您需要使用Greater Than Equal To
和Less Than
运算符的组合。您不能使用Contains
运算符。您需要做的是首先获取客户端上的所有数据,然后Contains
仅用于过滤客户端上的数据。
有关支持的查询运算符的列表,请参阅此链接:https ://msdn.microsoft.com/en-us/library/azure/dd135725.aspx 。
我知道我可以使用 RowKeys 来做到这一点,但是否可以使用 PartitionKeys 来做到这一点?
我不认为这是可能的。我很想知道你为什么这么说。
一个后续问题是:即使可行,是否可取?PartitionKey 是否应该始终完全匹配——比如说,出于性能原因?
我强烈建议您阅读此优秀指南:https ://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/ 。
好消息是您可以进行部分匹配,只要被命中的分区数量很少,您就会获得“良好”的性能。如果您有很多分区键,性能会受到影响。
我可以尝试总结一篇优秀的文章,但它已经写好了,所以如果你将浏览器指向以下链接,你应该了解所有关于分区、行键和预期性能的知识:
https://msdn.microsoft.com/en-us/library/azure/hh508997.aspx