在 Windows Azure SQL 数据库中使用联合是一种选择。但我更喜欢将繁重的工作卸载到不同的数据存储,如表存储、Blob 或队列,因为它们是为处理繁重的负载而构建的,并且它们更容易分区。将此与良好的缓存相结合,您可能会轻松克服此限制。
想象一下,您的网站在您的主页上有前 10 种产品列表,并且您每天有 100,000 名访问者。一种选择是每次都查询 SQL Azure,但这可能会导致 SQL Azure 负载过重。但是您可以让工作进程每 24 小时运行一次并计算当时排名前 10 的产品,并将它们保存在表存储中(您可以在该表中创建一些分区,其中包含每个国家、每个类别的前 10 个产品,. ..)。您可以将其视为预先生成的视图。每次您想要显示前 10 名产品时,您都会从可扩展性更好的表存储(表中的特定分区)中查询项目。在那里添加一些 ASP.NET 缓存,您将拥有一个非常可靠的系统。
那就是读取数据。但我想你也会期待一些用户输入,用户可以在其中创建订单、发送消息……再说一次,如果你期望负载很重,SQL Azure 可能不是直接与之交互的最佳选择(见限制)。在前端和后端之间使用队列可能是更好的解决方案。
当您的用户下订单时,您可以将消息写入队列(存储队列或服务总线队列)。工作人员将接收此消息,并在表格中为该订单创建一条记录,其中包含时间、产品数量,甚至可能是您将在用户订单屏幕中显示的状态(如处理中)。完成此操作后,您就有了完成订单所需的所有时间,完成后您将最终结果保存在 SQL Azure 中(并更新表存储中的订单记录)。将最终结果保存在 SQL Azure 中仍然可以使用报告等...
这将对您的应用程序产生很大影响。另一种解决方案是自己在虚拟机中托管 SQL Server,但请注意,这仍在 CTP 中:Provisioning a SQL Server Virtual Machine on Windows Azure