并行查询Azure存储

本文关键字:存储 Azure 查询 并行 | 更新日期: 2023-09-27 18:19:58

我目前有一个问题,它看起来像:

TableQuery<CloudTableEntity> query = new TableQuery<CloudTableEntity().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, PK));
foreach (CloudTableEntity entity in table.ExecuteQuery(query))
{
    //Logic
}

我一直在研究相似性,然而,我找不到任何关于如何使用它的好代码示例

CloudTableEntity().Where(PartitionKey == "11" || PartitionKey == "22")

在那里我可以有大约40000个分区键。有什么好方法可以做到这一点吗?

并行查询Azure存储

以下示例代码将并行发出多个分区键查询:

     CloudTable table = tableClient.GetTableReference("xyztable");
     List<string> pkList = new List<string>(); // Partition keys to query
     pkList.Add("1");
     pkList.Add("2");
     pkList.Add("3");
     Parallel.ForEach(
        pkList,
        //new ParallelOptions { MaxDegreeOfParallelism = 128 }, // optional: limit threads
        pk => { ProcessQuery(table, pk); }
     );

其中ProcessQuery定义为:

  static void ProcessQuery(CloudTable table, string pk)
  {
     string pkFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pk);
     TableQuery<TableEntity> query = new TableQuery<TableEntity>().Where(pkFilter);
     var list = table.ExecuteQuery(query).ToList();
     foreach (TableEntity entity in list)
     {
        // Process Entities
     }
  }

请注意,在上面列出的同一查询中对两个分区键进行"或"运算将导致完整的表扫描。为了避免完整的表扫描,如上面的示例代码所示,每个查询使用一个分区键执行单独的查询。

有关查询构造的更多详细信息,请参阅http://blogs.msdn.com/b/windowsazurestorage/archive/2010/11/06/how-to-get-most-out-of-windows-azure-tables.aspx

使用表。ExecuteQuerySegmentedAsync将提供更好的性能