2010-04-15 78 views
23

我正处于一个Web应用程序的规划阶段,该应用程序将在ASP.NET的Azure中为网站和Silverlight托管,以实现丰富的用户体验。我应该使用Azure Tables还是SQL Azure来存储我的应用程序数据?Azure表或SQL Azure?

回答

34

Azure Table Storage似乎比SQL Azure更便宜。它也比SQL Azure具有更高的可伸缩性。

如果您一直在做大量的关系数据库工作,SQL Azure更容易使用。如果你正在移植一个已经在使用SQL数据库的应用程序,那么将它移植到SQL Azure将是明显的选择,但这是我推荐它的唯一情况。

Azure表的主要限制是缺少二级索引。这是在PDC '09宣布的,目前即​​将上市,但没有任何时间表公告。 (请参阅http://windowsazure.uservoice.com/forums/34192-windows-azure-feature-voting/suggestions/396314-support-secondary-indexes?ref=title

我已经看到了混合系统的建议使用,其中您将大量数据使用表和blob存储,但使用SQL Azure进行索引,搜索和过滤。然而,我自己还没有机会尝试这个解决方案。

将辅助索引添加到表存储后,它基本上将成为基于云的NoSQL系统,并且将比现在更有用。

+0

让我们希望他们在Build 2014上宣布这一点。 – 2014-01-19 13:25:12

+0

正如我的回答所述,这是在2009年PDC(他们曾称之为Build)宣布的!几年前我停止了屏息。 2014版Build的发布会很可笑。他们只需要发送该功能。 Azure Tables可能是竞争者。 – CoderDennis 2014-01-19 13:36:37

8

对于那些试图在两种选择之间做出决定的人,一定要将报告要求纳入等式中。 SQL Azure Reporting和其他报告产品支持SQL Azure开箱即用。如果您需要生成复杂或灵活的报告,则可能需要避免使用表存储。

3

另一个考虑因素是延迟。曾经有一个网站使用微软基准测试表格存储和SQL Azure的各种对象大小的吞吐量和延迟。由于该网站已不再可用,我只是从我记得的内容中给出一​​个粗略的近似值。表存储通常比SQL Azure具有更高的吞吐量。 SQL Azure往往有较低的延迟(多达1/5)。

已经提到,表存储容易扩展。但是,SQL Azure也可以通过Federations进行扩展。请注意,联合会(有效sharding)为您的应用程序增加了很多复杂性。我也不确定有多少联盟会影响性能,但我想有一些开销。

如果业务连续性是优先事项,则默认情况下请考虑使用Azure存储you get cheap geo-replication。使用SQL Azure,您可以完成类似的工作,但需要花费更多的精力与SQL Data Sync。请注意,SQL数据同步还会导致性能开销,因为它需要所有表上的触发器来监视数据更改。

2

我意识到这是一个古老的问题,但仍然是一个非常有效的问题,所以我加了我的回复。

Coder Dennis和其他人已经指出了一些事实 - Azure Tables更便宜,Azure Tables可以更大,更高效等。如果您100%确定要坚持使用Azure,请使用Tables。

但是,这假定您已经决定了Azure。通过使用Azure表,您可以将自己锁定在Azure平台中。这意味着要编写非常特定于Azure表的代码,这些代码不仅要移植到Amazon,还必须重写代码的这些区域。另一方面,使用LINQ编写SQL数据库将更容易转移到另一个云服务。

如果您已经决定了您的云平台,这可能不是问题。

1

对于你的问题,我想谈谈如何用逻辑决定选择SQL表,哪些需要使用Azure表。

正如我们所知,SQL Table是一个关系数据库引擎。但如果您在一个表中有大数据,则SQL表不适用,因为SQL查询获取大数据的速度很慢。

这时你可以选择Azure Table,Azure Table查询是如此之快,然后是SQL Table for大数据,例如在我们的网站上,有人订阅了很多文章,我们把这篇文章作为feed给用户,每个用户有文章标题和说明的副本,因此在文章表中有大量数据,如果我们使用SQL表,每个查询执行可能需要超过30秒。但是在Azure Table中,通过PartitionKey获取用户文章提要,并且RowKey非常快速。

从这个例子中你可能知道如何在SQL表和Azure表中进行选择。

+0

听起来像你应该已经添加了一些索引到你的SQL表。 – CoderDennis 2014-01-23 15:39:14

4

Azure表比SQL Azure更便宜,更简单,更好。 SQL Azure是托管SQL环境,本质上是多租户,所以您应该分析您的性能需求是否适合SQL Azure。 SQL Azure的高级版本已经发布,并且在撰写本文时已预览(请参阅HERE)。

我认为决定性因素,SQL Azure和Azure的表之间的决定如下:

  • 你需要做复杂的连接和使用辅助指标?如果是的话,SQL Azure是最好的选择。
  • 你需要存储过程吗?如果是的话,SQL Azure。
  • 您是否需要自动缩放功能? Azure表是最好的选择。
  • Azure表内的行大小不能超过4MB。如果您需要在一行中存储大数据,最好将其存储在blob存储中,并在表格行中引用blob的URI。
  • 您是否需要存储大量的半结构化数据?如果是的话,Azure表是有利的。

尽管Azure表在简单性和成本方面极为有利,但仍有一些需要考虑的限制。有关初步指导,请参阅HERE

2

我建议您将Azure缓存与Azure Table结合使用。表格单独具有200-300ms的延迟,偶尔会出现尖峰,这可能会显着减慢响应时间/ UI交互性。Cache + Table对我来说似乎是一个成功的组合。

0

我想知道在适当的时候我们是否会结束一些“独立于供应商的”云api库?

0

我认为你首先要定义你的应用程序使用漏斗是什么。您的数据模型会经常发生变化还是稳定?你必须能够执行超快速插入和读取不那么复杂?你需要像搜索一样提前谷歌?存储BLOBS?

这些问题(而不仅仅是)你必须自问和回答,以决定是否更可能使用NoSql或SQL方法来存储数据。

请考虑这两种方法可以很容易地共存,并且可以通过BLOB存储扩展。