我需要在 Windows Azure 中查询 2 亿个实体的存储。理想情况下,我想使用表服务而不是 SQL Azure 来完成这项任务。
用例是这样的:包含新实体的 POST 将从面向 Web 的 API 传入。我们必须查询大约 2 亿个实体,以确定我们是否可以接受新实体。
实体限制为 1,000:这是否适用于此类查询,即我必须一次查询 1,000 并执行我的比较/业务规则,或者我可以一次查询所有 2 亿个实体?我想在后一种情况下我会超时。
想法?
我需要在 Windows Azure 中查询 2 亿个实体的存储。理想情况下,我想使用表服务而不是 SQL Azure 来完成这项任务。
用例是这样的:包含新实体的 POST 将从面向 Web 的 API 传入。我们必须查询大约 2 亿个实体,以确定我们是否可以接受新实体。
实体限制为 1,000:这是否适用于此类查询,即我必须一次查询 1,000 并执行我的比较/业务规则,或者我可以一次查询所有 2 亿个实体?我想在后一种情况下我会超时。
想法?
1000 的限制是从查询返回的行数,而不是查询的行数。
将所有 2 亿行都拉入 Web 服务器以检查它们是行不通的。
诀窍是使用可用于检查记录是否应被接受的键来存储行。
扩展 Shiraz 关于表存储的评论:表被组织成分区,然后您的实体由 Row 键索引。因此,使用分区键+行键的组合可以非常快速地找到每一行。诀窍是为您的特定应用程序选择最佳的分区键和行键。
对于上面的示例,您通过电话号码进行搜索,您可以将 TelephoneNumber 设为分区键。您可以很容易地找到与该电话号码相关的所有行(但是,不知道您的应用程序,我不知道您期望有多少行)。为了进一步细化,您需要在分区键中定义一个可以索引的行键。这会给您一个非常快速的响应,让您知道记录是否存在。
表存储(实际上是一般的 Azure 存储 - 表、blob、队列)具有众所周知的 SLA。您可以在给定的分区上每秒执行多达 500 个事务。对于上面的示例,对给定电话号码的行的查询将等同于一次事务(除非返回的行数超过 1000 - 要查看所有行,您需要额外的提取);添加一个行键来缩小搜索范围确实会产生一个事务)。插入新行也是如此。您还可以在单个分区中批量处理多行插入,并将它们保存在单个事务中。
有关 Azure 表存储的一个很好的概述,以及一些好的实验室,请查看平台培训工具包。
有关表中事务的详细信息,请参阅此msdn 博客文章。