WEB开发网
开发学院服务器存储技术 数据点:Windows Azure 表存储:不同于传统数据库... 阅读

数据点:Windows Azure 表存储:不同于传统数据库

 2010-08-09 00:00:00 来源:WEB开发网   
核心提示: varquery=_serviceContext.FoodTable.AsTableServiceQuery().Where(c=>c.PartitionKey.CompareTo("Vegetable")>=0&&c.PartitionKey.CompareTo

var query = _serviceContext.FoodTable.AsTableServiceQuery() 
      .Where(c => c.PartitionKey.CompareTo("Vegetable")>=0 
      && c.PartitionKey.CompareTo("Vegetablf")<0 
      && c.Color == "Green");

这样做可以只搜索以 Vegetable 开头(精确匹配)的分区。(第二个谓词中使用了 Vegetablf 而不是 Vegetable,这就定义了上限,以避免返回 Yogurt 或 VegetableLike 等分区中的食物。)在本文附带的示例代码中,您将看到我如何动态完成这种替换。

并行查询以实现全表扫描

如果您要搜索所有的绿色食物而不管其类型,该怎么办呢?Windows Azure 不得不扫描整个表。如果表很大,Windows Azure 会带来另一个麻烦:它一次只能返回 1,000 行(或处理 5 秒)。Windows Azure 将返回这些结果以及一个延续键,然后再回去继续查询。这将是一个冗长的同步过程。

但您可以不这样做,而是执行多个查询。您可以遍历已知的类别列表,然后构建每个查询:

_serviceContext.FoodTable.AsTableServiceQuery() 
.Where(c => c.PartitionKey == _category && c.Color == "Green");

然后您可以发出所有查询,使它们以并行模式运行。

有关查询的更多设计注意事项

RowKey 属性有多个用途。它可以与 PartitionKey 一起定义表中每一行的唯一性。例如,我认识另一位名叫 Julie Lerman 的人(我真的认识)。因此,当我们共享值为 lerman_julie 的 PartitionKey 时,RowKey 对于区分我们就变得相当重要。您还可以使用 RowKey 来帮助进行排序,因为它也是索引的一部分。那么,RowKey 对于年长的 Julie Lerman(就是我)和年轻的 Julie Lerman 有什么用呢?GUID 无疑能够达到标识的目的,但对于搜索或排序则毫无用处。在这种情况下,值的组合可能是最佳方案。

上一页  1 2 3 4 5  下一页

Tags:数据 Windows Azure

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接