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

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

 2010-08-09 00:00:00 来源:WEB开发网   
核心提示: 但在定义 PartitionKey 时,您要考虑的不仅仅是查询,数据点:Windows Azure 表存储:不同于传统数据库(3),因为它还用于对表进行物理分区,从而提供负载平衡和可扩展性,如果您要搜索部分字符串,您必须使用 String.CompareTo 来检查字符串的起始字符,例如一个包含

但在定义 PartitionKey 时,您要考虑的不仅仅是查询,因为它还用于对表进行物理分区,从而提供负载平衡和可扩展性。例如一个包含食物信息的表,这个表的 PartitionKey 对应着食物的种类,如 Vegetable(蔬菜)、Fruit(水果)和 Grain(谷物)。在夏天,Vegetable 分区中的行可能会很忙(成为所谓的“热”分区)。Windows Azure 表服务可以将 Vegetable 分区移到其他服务器上,以便更好地处理对该分区的众多请求,从而实现负载平衡。

如果您预计该分区上的活动将超出一台服务器的处理能力,您应该考虑创建更细致的分区,如 Vegetable_Root 和 Vegetable_Squash。这是因为负载平衡的粒度单位是 PartitionKey。在执行负载平衡时,具有相同 PartitionKey 值的所有行都在一起。您甚至可以设计您的表,使表中的每个实体都有不同的分区。

深入探讨 PartitionKey 和查询

请注意,当我建议对 Vegetable PartitionKey 进行微调时,我将 Vegetable 放在了键的开头而不是末尾。这是另一种可实现高效查询的方式。从 Microsoft .NET Framework 对 Windows Azure 表进行的查询使用了 LINQ to REST 以及派生自 WCF 数据服务 System.Data.Services.Client.DataServiceContext 的上下文。如果您要找到绿色南瓜,您就可以在 Vegetable_Squash 分区中进行搜索,而不必浪费资源来搜索整个表:

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

查询 OData(由 WCF 数据服务返回)和查询 Windows Azure 表之间的重大区别就是字符串函数不受支持。如果您要搜索部分字符串,您必须使用 String.CompareTo 来检查字符串的起始字符。但如果您要查询整个 Vegetable 类别,您可以使用 CompareTo 方法对 PartitionKey 的开头进行前缀搜索:

上一页  1 2 3 4 5  下一页

Tags:数据 Windows Azure

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