从 Azure Table 存储中的许多分区键中选择

Selecting from many partition keys in Azure Table Storage

在 Azure Table 存储中,我存储新闻更新,分区键是分配给新闻类别的关键字,例如"politics"、"sports" 等

当用户登录时,我希望能够 select 根据用户的兴趣进行记录——这些记录保存在另一个数据库中。所以用户可能对 "politics" 和 "sports" 感兴趣。显然,我们可能有大量用户感兴趣的类别。可能有 20 多个类别。

如何查询我的 table 以便我可以获得这些类别的任何新闻更新?具体来说,问题是我可以在针对 Azure Table 存储的 SELECT 语句中指定的条件数量限制。我认为我不能指定超过 15 个条件,例如partitionKey = x 或 partitionKey = y 等

通常,在 NoSQL 数据库中,解决方案是去规范化,但在这种情况下,这将是一个糟糕的选择。假设我使用用户的 ID 作为我的分区键。如果我有 100 万用户,那么使用不同的分区键为同一记录创建 100 万个副本以便每个用户都可以轻松获得自己的更新是没有意义的。

如何使用 Azure Table 存储处理这种情况?

处理此问题的推荐方法是为每个感兴趣的范围创建单独的查询。这也将为您提供最佳性能,因为每个查询都可以避免跨越分区边界。如果您要编写查询以便在多个分区键上进行过滤,那么您的性能将会受到影响,因为您将跨越多个分区边界。

参见 https://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/#design-for-querying。它不会讨论您的方案,但会提供优化查询的指南。

有关 Azure 表分区的更多信息,另请参阅 https://azure.microsoft.com/en-us/documentation/articles/storage-scalability-targets/#partitions-in-azure-storage