2011-08-16 77 views
2

我评估使用Azure的表存储为我建立一个应用程序,我想获得一些意见...Azure Table中存储设计Web应用

  1. 与否,这是一个这个应用程序的好主意,或者
  2. 如果我应该坚持使用SQL,并且如果我确实使用了ATS,那么设计存储的方法是什么。

应用程序是一个任务管理Web应用程序,针对个人用户。这真的是一个非常简单的应用程序。它具有以下实体...

  • 账户(每个用户都有一个账号。)
  • 任务(用户创建任务,很明显。)
  • 任务列表(用户可以安排自己的任务到列表中。)
  • 文件夹(用户可以安排自己的名单到文件夹。)
  • 标签(用户可以指定标签的任务。)

有几个特点/我们的Wi要求我也要建设,我需要考虑...

  • 我们最终将提供功能为不同的帐户共享列表彼此。
  • 用户需要能够过滤他们的任务以各种不同的方式。例如...
    • 任务特定列表
    • 任务的方式被标记为“A”和“B”
    • 任务是由于明天一个具体名单。
    • 任务是跨所有列表标记为“A”。我有共同的
    • 任务。包含“你好”的说明为任务
    • 任务。
    • 等等
  • 我们的应用程序是AJAX的重配产生了非常小的变化到任务更新。所以,有很多小的请求和更新正在进行。例如...
    • 内置编辑
    • 点击完成
    • 更改到期日
    • 等...

由于沉重的CRUD的工作,而事实上,我们真的有一个简单的实体列表,使用ATS是可行的。但是,我关注更新的交易成本,也不论是否我所描述的查询/过滤可有效支持。

我们想象的先发小数字(〜几百个账户,〜数百或数千每个帐户的任务),但我们显然希望发展我们的账户。

如果我们不与ATS去,这将是最好有...每个实体

  • 一个表(帐户,任务,任务列表等)
  • 每个客户的表集(JohnDoe_Tasks ,JohnDoe_TaskLists等)
  • 其他想法?

我知道这是一个很长的帖子,但如果有人对方向有任何想法或想法,我将不胜感激!

+0

,我不认为你可以实事求是地期望,使用户确定什么是适合您的业务需求,或设计自己的应用程序。为你。 –

+0

@Mitch:我只是问是否其他人也经历了类似的决策过程,并可以提供关于表存储的任何建议(NoSQL方法)。 – Kevin

+1

第9频道云端封面上有一集包括一个示例,显示如何构建使用MVC3和ATS的Azure简单任务应用程序。 http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-40-ASPNET-MVC-3-with-Table-Storage –

回答

5

Azure的表存储是非常适合于应用程序的任务。只要您将分区密钥和行密钥设置得很好,您就可以获得大量并发用户的快速和一致的性能。

有关任务共享,ATS提供乐观并发支持多个用户访问并行相同的数据。当多个帐户同时编辑相同的数据时,您可以使用乐观并发来警告用户,并防止他们意外覆盖彼此的更改。

至于成本,你可以估算基于账户的数量,以及你期望这些帐户是如何积极您的交易成本。因此,如果您期望300个账户,并且每个账户每天进行100次编辑,则您每天将进行30K笔交易,其中(每天$.01 per 10K transactions)的成本大约为每天0.03美元,或者每月不到1美元。即使这个估计值已经下降了10倍,每个月的交易成本仍然低于一家体面餐厅的汉堡包。

对于设计而言,考虑的主要方面是如何锁定表格。在设计您的ATS应用程序之前,我建议您阅读ATS white paper,特别是关于分区的部分。对于应用程序来说,一个合理的设计就是每个实体类型(帐户,任务等)使用一个表格,然后按帐户名称进行分区,并使用行密钥任务的一些独特功能。对于这两种关键类型,请务必考虑对未来查询的影响。例如,通过将可能一起更新的实体分组到同一个分区中,可以使用实体组事务在单个事务中更新多达100个实体 - 这不仅可以提高速度,还可以节省交易成本。对于您的密钥的另一个含义,如果用户一次只能查看一个文件夹,则可以使用行密钥来存储该文件夹(例如,rowkey =“文件夹;独特的任务ID”),并具有非常高效的查询一次一个文件夹。

总体来看,ATS将支持你的任务应用程序很好,并允许它扩展到用户数量庞大。我认为主要的问题是,你需要云量的缩放吗?如果你这样做,ATS是一个很好的解决方案;如果你不这样做,你可能会发现,调整到一个新的范例,设计和实施比你得到的好处将花费更多时间。

+0

感谢您的意见!我很感激。看起来,花时间来设计分区和行键方法很重要。我不确定我们是否真的需要云计算。但转向这种模式的想法是有吸引力的。 – Kevin

1

什么你都在问是一个相当大的问题,所以请原谅我,如果我不给你一个确切的答案..简短的回答是:当然,继续与ATS :)

您最关心的问题在这种情况下将是速度。正如你所指出的那样,你期待着很多CRUD操作。开箱即用,ATS不支持传输,但您可以通过使用CQRS结构构建出自己的这种挑战。

从使用SQL来ATS最大的区别是你缺乏关系和一般查询的可能性,因为ATS是一个“的NoSQL”的做法。这意味着你必须构建你的表格中支持你的查询操作,这不是一个简单的任务的方式..

如果你意识到这一点,我看不出有任何麻烦做什么傻冒描述。

很想看到最终结果!

+0

感谢您的意见! – Kevin