查询Azure存储表是否总是一个事务?

查询Azure存储表是否总是一个事务?,azure,transactions,azure-table-storage,Azure,Transactions,Azure Table Storage,假设我有一个Azure存储表,其中有50K行和这样的实体 { PartitionKey, RowKey, Name, Price } var query = from entity in dataServiceContext.CreateQuery<MyEntity>(tableName) where entity.Price == 10 select new { entity.Name}; 这

假设我有一个Azure存储表,其中有50K行和这样的实体

 {
  PartitionKey,
  RowKey,
  Name,
  Price
}
var query = from entity in dataServiceContext.CreateQuery<MyEntity>(tableName)
                 where entity.Price == 10
                 select new { entity.Name};
这个问题应该是这样的

 {
  PartitionKey,
  RowKey,
  Name,
  Price
}
var query = from entity in dataServiceContext.CreateQuery<MyEntity>(tableName)
                 where entity.Price == 10
                 select new { entity.Name};
var query=来自dataServiceContext.CreateQuery(tableName)中的实体
其中entity.Price==10
选择新的{entity.Name};

当我需要搜索所有Price==10的实体时,是否只计算返回结果的数量?或者,每个实体(entity.Price==10)的检查是否会被计算为单独的读取事务,这将导致50K个事务?

查询本身及其响应将在单个可计费事务中(区别于数据库事务)。但是,该响应可能没有您请求的所有行。如果结果集特别大,您将得到一个延续标记。当您使用延续令牌拉取更多行时,将发生另一个事务。

查询本身及其响应将在单个可计费事务中(区别于数据库事务)。但是,该响应可能没有您请求的所有行。如果结果集特别大,您将得到一个延续标记。当您使用延续令牌拉取更多行时,将发生另一个事务。

这是怎么回事?

每秒实体数(帐户)

对于一个帐户,访问表的可扩展性限制高达每秒20000个实体(每个1KB)。一般来说,插入、更新、删除或扫描的每个实体都将计入该目标。因此,包含100个实体的批插入将计为100个实体扫描1000个实体并返回5的查询将计为1000个实体。

无论如何,在这里
了解Windows Azure存储计费–带宽、事务和容量 这个怎么样?

每秒实体数(帐户)

对于一个帐户,访问表的可扩展性限制高达每秒20000个实体(每个1KB)。一般来说,插入、更新、删除或扫描的每个实体都将计入该目标。因此,包含100个实体的批插入将计为100个实体扫描1000个实体并返回5的查询将计为1000个实体。

无论如何,在这里
了解Windows Azure存储计费–带宽、事务和容量

要记住一件事:您发布的查询将导致完整的表扫描。我意识到这不是你的问题,因此我发表评论。但随着表大小的增加,这可能会导致应用程序出现一些与性能相关的问题。你至少应该考虑在分区内搜索(减少到分区扫描)。希望我能双倍投票。Great eye@davidmakonone需要记住一件事:您发布的查询将导致完整的表扫描。我意识到这不是你的问题,因此我发表评论。但随着表大小的增加,这可能会导致应用程序出现一些与性能相关的问题。你至少应该考虑在分区内搜索(减少到分区扫描)。希望我能双倍投票。Great eye@davidmakognoto澄清“特别大”,结果集不能大于1000行。如果有更多行可用,您将获得一个延续令牌。但是,您也可以获得一个结果集少于1000行的延续令牌。即使有符合条件的行,也可以获得一个包含0行和延续标记的结果集。如果不是按PK/RK查询,则更有可能获得延续令牌。为了澄清“特别大”,结果集不能大于1000行。如果有更多行可用,您将获得一个延续令牌。但是,您也可以获得一个结果集少于1000行的延续令牌。即使有符合条件的行,也可以获得一个包含0行和延续标记的结果集。如果不是按PK/RK查询,则更有可能获得延续令牌。