我一般都是Azure Tables和NOSQL的新手。
我目前在Azure Tables中有一个表,大约有60,000行。它包含职位空缺,包括ID(RowKey),雇主(PartitionKey),职位,地区,类别和其他列。
当网站上有人执行搜索时,请求将发送到外部匹配系统。匹配系统将返回适用的作业。匹配引擎为每个作业返回ID和雇主。
搜索可能包含10个不同的雇主,涵盖300个工作岗位。如果我使用的是SQL Server数据库,我只需在ID上创建一个“IN”子句,它就是主键,以便从我的表中选择那些作业。
使用Azure Table,推荐的方法是使用PartitionKey(我已经创建了Employer),所以我的计划是为每个雇主发出一个查询表,然后将结果联合起来,最后在传递给用户界面。
我的问题是我无法运行查询,例如“WHERE Employer =”MyEmployer“AND ID IN(1,2,3,4,5,6)。
实现这一目标的最佳方法是什么?我不希望雇主返回所有工作,因为我可能不会全部使用它们。我希望某个雇主根据我回来的身份证明某些工作。
这是我认为应该简单的事情,但到目前为止证明是棘手的!
答案 0 :(得分:3)
我的问题是我无法运行查询,例如" WHERE Employer = " MyEmployer" AND ID IN(1,2,3,4,5,6)。
您当然可以执行IN
查询,但语法会略有不同。假设您使用REST API并使用ODATA语法编写查询,那么您将使用此方法:
(PartitionKey eq 'MyEmployer' and (RowKey eq '1' or RowKey eq '2' or RowKey eq '3' or RowKey eq '4' or RowKey eq '5' or RowKey eq '6')
您需要考虑的一些事项:
or
个子句的数量限制。如果我没弄错,查询字符串的最大长度为1024个字符。PartitionKey eq 'MyEmployer' and RowKey eq '1'
。最后,您可能希望阅读Storage Team的这篇博文:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/11/06/how-to-get-most-out-of-windows-azure-tables.aspx。这将为您提供非常好的见解。