在我的应用程序中有一个常见的情况,我创建了一个查询来获取partitionkey为常量但rowkey应在词法范围内的所有实体(例如,仅以某个前缀开头的行):
//query to get all entities in partition "KnownPartition" where RowKey starts with "Prefix_"
CloudTableQuery<MyEntity> query =
(from e in tableServiceContext.CreateQuery<MyEntity>(tableName)
where e.PartitionKey == "KnownPartition"
&& e.RowKey.CompareTo("Prefix_") > 0
&& e.RowKey.CompareTo("Prefix`") <= 0 // ` is '_' + 1
select e).AsTableServiceQuery();
我必须使用CompareTo,因为这类查询不支持StartsWith等字符串函数。这是可行的,但条件是很难读和重复了很多。因此,我不想用这种难懂的条件编写大量的查询,而是想做一个“内联”它的函数:
public static Boolean HasPrefix(this String rowKey, String prefix)
{
return rowKey.CompareTo(prefix + '_') > 0 && rowKey.CompareTo(prefix + '`') <= 0;
}
CloudTableQuery<MyEntity> query =
(from e in tableServiceContext.CreateQuery<MyEntity>(tableName)
where e.PartitionKey == "KnownPartition" && e.RowKey.HasPrefix("Prefix")
select e).AsTableServiceQuery();
但是当我运行它时,我从Azure得到一个关于我的函数不被支持的异常。有没有什么方法可以这样写使它得到支持?毕竟,我使用的条件与查询完全相同,只是封装在函数中。
如果将条件分解为一个函数,则该函数需要返回表达式树而不是布尔值。我不知道LINQ查询语法是否会支持这一点,但您可以使用方法语法做到这一点,如下所示:
public static Expression<Func<MyEntity, bool>> HasPrefix(String prefix)
{
return e => e.RowKey.CompareTo(prefix + '_') > 0 && e.RowKey.CompareTo(prefix + '`') <= 0;
}
CloudTableQuery<MyEntity> query =
(from e in tableServiceContext.CreateQuery<MyEntity>(tableName)
where e.PartitionKey == "KnownPartition"
select e)
.Where(HasPrefix("Prefix"))
.AsTableServiceQuery();
您好,从我的问题开始:Windows Azure表访问延迟分区键和行键选择有关我在 Azure 存储帐户中组织数据的方式。我有一个表存储方案,旨在存储有关实体的信息。 大约有4000-5000个实体。共有6种实体类型,类型大致均匀分布。所以每个大约800英尺。 参数键:实体类型-日期 行键:实体标识 随着问题的详细说明,我一直遇到延迟问题,查询多个分区似乎需要很长时间。 基本上,一个可能的解决方案
问题内容: 我有很多不同提供商的IP范围。例如 我将此IP转换为int32: 我的任务: 通过用户IP地址查找提供者名称(例如192.168.2.20(3232236052)) 在MySQL中很简单: Redis怎么做? 问题答案: 这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单: 使用哈希的集合来存储提供者数据 使用zset索引范围的最大值 检索最大值大于IP的(唯一)范围
这个问题涉及这里描述的Azure表存储中的性能目标阈值。特别是,我关心的是每个分区2K个实体,每秒20K个实体的阈值。我的理解是,如果你越过这些阈值,Azure可能会开始返回500和503个错误。 我想我可能遇到了这个问题,我正在寻找关于这些项目到底是如何计算的澄清。我知道,如果您对整个表或一个分区执行扫描,那么您可能会为Azure扫描的每个实体“收费”,而不管您返回的数字是多少。由于您可以在一个
我试图使用rest API从azure数据表中检索数据。 Api错误已输出,数据无效。 如果我同时添加RowKey和PartitionKey,就像下面这样。它起作用了。 是否需要通过行键? 如果我只想从一个分区检索所有数据。我知道,我们可以在查询参数中添加一个$filter,但这不会导致性能问题吗? 请分享你的想法。 谢谢!
我试图通过PartitionKey和RowKey从Azure表存储中检索一个实体。当我的表中确实有一个实体带有这些键时,这种方法非常有效。 但是,当没有找到带有for键的实体时,我只是收到一个相当不清楚的错误,说“其中一个请求输入无效”…… 未处理的拒绝存储错误:其中一个请求输入无效。 有没有办法检查特定分区和行密钥是否存在实体?
使用扩展度量,我试图检索特定VM的特定度量。每个查询似乎花费的时间都非常长,因为表中每隔15秒就会为每个VM创建新的记录。 所以我试图在最后5分钟内查询该表,但它不起作用,并给我一个错误。有人知道如何查询这些WADMETRICS表吗?