我正处于一个 Web 应用程序的规划阶段,该应用程序将使用 ASP.NET 托管在 Azure 中,用于网站和网站内的 Silverlight,以获得丰富的用户体验。我应该使用 Azure Tables 还是 SQL Azure 来存储我的应用程序数据?
11 回答
Azure 表存储似乎比 SQL Azure 便宜。它也比 SQL Azure 具有更高的可扩展性。
如果您一直在做大量的关系数据库工作,SQL Azure 会更容易使用。如果您要移植一个已经在使用 SQL 数据库的应用程序,那么将其移至 SQL Azure 将是显而易见的选择,但这是我推荐的唯一情况。
Azure Tables 的主要限制是缺少二级索引。这是在 PDC '09 上宣布的,目前被列为即将推出,但没有任何时间框架公告。(参见http://windowsazure.uservoice.com/forums/34192-windows-azure-feature-voting/suggestions/396314-support-secondary-indexes?ref=title)
我已经看到建议使用混合系统,在该系统中,您使用表和 Blob 存储来存储大量数据,但使用 SQL Azure 进行索引、搜索和过滤。但是,我自己还没有机会尝试该解决方案。
一旦将二级索引添加到表存储中,它本质上将是一个基于云的NoSQL系统,并且将比现在有用得多。
尽管名称相似,但 SQL Azure 表和表存储几乎没有共同之处。
以下是两个可能对您有所帮助的链接:
基本上,第一个问题应该是我的应用程序真的需要扩展吗?如果没有,请选择 SQL Azure。
对于那些试图在这两个选项之间做出决定的人,请务必将报告要求纳入等式。 SQL Azure 报告和其他报告产品支持开箱即用的 SQL Azure。如果您需要生成复杂或灵活的报告,您可能希望避免使用表存储。
Azure 表比 SQL Azure 更便宜、更简单且可扩展性更好。SQL Azure 是托管 SQL 环境,本质上是多租户,因此您应该分析您的性能要求是否适合 SQL Azure。SQL Azure 的高级版本已发布,并且在撰写本文时处于预览状态(请参阅此处)。
我认为在 SQL Azure 和 Azure 表之间做出决定的决定性因素如下:
- 你需要做复杂的连接和使用二级索引吗?如果是,SQL Azure 是最佳选择。
- 你需要存储过程吗?如果是,SQL Azure。
- 您需要自动缩放功能吗?Azure 表是最佳选择。
- Azure 表中的行大小不能超过 4MB。如果需要在一行内存储大数据,最好将其存储在 blob 存储中,并在表行中引用 blob 的 URI。
- 您是否需要存储大量半结构化数据?如果是,Azure 表是有利的。
尽管 Azure 表在简单性和成本方面非常有利,但仍需要考虑一些限制。请参阅此处获取一些初步指导。
另一个考虑因素是延迟。曾经有一个站点,Microsoft 使用表存储和 SQL Azure 对各种对象大小的吞吐量和延迟进行微基准测试。由于该站点不再可用,因此我将根据我的记忆给您一个粗略的近似值。表存储的吞吐量往往比 SQL Azure 高得多。SQL Azure 往往具有较低的延迟(高达 1/5)。
已经提到表存储很容易扩展。但是,SQL Azure 也可以通过Federations进行扩展。请注意,联合(实际上是分片)给您的应用程序增加了很多复杂性。我也不确定联邦对性能的影响有多大,但我想会有一些开销。
如果业务连续性是优先事项,请考虑使用 Azure 存储,默认情况下可以获得廉价的异地复制。使用 SQL Azure,您可以使用SQL Data Sync完成类似但更努力的事情。请注意,SQL 数据同步也会产生性能开销,因为它需要所有表上的触发器来监视数据更改。
我意识到这是一个老问题,但仍然是一个非常有效的问题,所以我正在添加我的回复。
CoderDennis 和其他人已经指出了一些事实——Azure Tables 更便宜,Azure Tables 可以更大、更高效等。如果你 100% 确定你会坚持使用 Azure,那就选择 Tables。
但是,这假设您已经决定使用 Azure。通过使用 Azure Tables,您将自己锁定在 Azure 平台中。这意味着编写非常特定于 Azure Tables 的代码,不仅要移植到 Amazon,还必须重写代码的这些区域。另一方面,使用 LINQ 为 SQL 数据库编程将更容易移植到另一个云服务。
如果您已经决定使用云平台,这可能不是问题。
我建议结合 Azure 表查看 Azure 缓存。仅表就有 200-300 毫秒的延迟,偶尔会有更高的峰值,这会显着减慢响应时间/UI 交互性。对我来说,Cache + Table 似乎是一个成功的组合。
对于你的问题,我想谈谈如何用逻辑决定选择 SQL Table 以及哪些需要使用 Azure Table。
众所周知,SQL Table 是一个关系数据库引擎。但是如果你在一个表中有大数据,则 SQL 表不适用,因为 SQL 查询获取大数据很慢。
这时候可以选择Azure Table,Azure Table查询速度比SQL Table大数据快,比如我们网站上,有人订阅了很多文章,我们把文章作为feed给用户,每个用户都有一份文章标题和描述,所以文章表中有很多数据,如果我们使用SQL表,每个查询执行可能需要30多秒。但是在 Azure Table 中,通过 PartitionKey 和 RowKey 获取用户文章提要是如此之快。
从这个示例中,您可能知道如何在 SQL 表和 Azure 表中进行选择。
我想知道我们是否会在适当的时候推出一些“供应商独立”的云 API 库?
我认为您必须首先定义您的应用程序使用渠道是什么。您的数据模型会经常变化还是稳定?您必须能够执行超快速的插入和读取不是那么复杂吗?你需要高级谷歌搜索吗?存储 BLOBS?
这些是您必须自问和回答的问题(不仅是),以便决定您是否更有可能使用 NoSql 或 SQL 方法来存储数据。
请考虑这两种方法可以轻松共存,也可以使用 BLOB 存储进行扩展。
Azure Tables 和 SQL Azure 都是两种不同的野兽。两者都适用于不同的场景,azure table 的一个缺点是你不能从 azure 移动到任何其他平台,除非你在代码中编写可以处理这种转变的提供程序。