我正在试用Azure表存储,以了解它作为大数据项目的平台。作为测试数据,我使用英国公司之家数据馈送为我提供了350万英国公司记录。我已经成功地创建了一个实体,并将大量的条目加载到我的表"Companies"中,但我认为这个模型不适合我,因为我的"搜索"或查询需求不仅仅是在PartitionKey和RowKey上。
My Company类是这样的:
public class Company : TableEntity
{
public Company() { }
public Company(string companyNumnber)
{
CompanyNumber = companyNumnber;
this.PartitionKey = "Company";
this.RowKey = companyNumnber;
RegAddress = new Address();
}
public String CompanyNumber { get; set; }
public Address RegAddress { get; set; }
public String CompanyName { get; set; }
public String PhoneNumber { get; set; }
public String CompanyCategory { get; set; }
public String CompanyStatus { get; set; }
public String CountryOfOrigin { get; set; }
public String DissolutionDate { get; set; }
public String IncorporationDate { get; set; }
public String URI { get; set; }
}
public class Address
{
public Address() { }
public String CareOf { get; set; }
public String POBox { get; set; }
public String AddressLine1 { get; set; }
public String AddressLine2 { get; set; }
public String PostTown { get; set; }
public String County { get; set; }
public String Country { get; set; }
public String PostCode { get; set; }
}
这一切都很好,我可以将实体加载到表存储中,我可以根据CompanyNumber查询表,但我还需要查询CompanyName表,这将不限于一个eq"equals"操作符……我需要能够做一个"包含"的属性,它看起来是不可能的。
我说的对吗?如果是这样的话,我们该怎么做呢?在我看来,我"卡住"了在SQL中托管这350万条记录,然后使用表存储与PartitionKey公司编号存储"相关"内容,然后以这种方式进行查找。
我希望它能降低(SQL Azure)的成本,但似乎我可能需要一个混合的方法。
看起来你必须使用像这样的具有文本搜索功能的索引库。
这是微软论坛上的相关讨论。
最后这都取决于你的需要,如果数据不是那么大,你可能想要使用SQL azure,这样你就可以使用文本查询。
另一个选择是组织您的字段,以便您可以使用前缀匹配搜索所需的字符串,这是表查询支持的。(你可以用"StartsWith"来代替"Contains")