面向Web应用的Azure表存储设计

面向Web应用的Azure表存储设计,azure,data-modeling,azure-sql-database,Azure,Data Modeling,Azure Sql Database,我正在评估Azure表存储在我正在构建的应用程序中的使用情况,我想得到一些关于 这对于应用程序来说是否是一个好主意,或者 如果我坚持使用SQL 如果我使用ATS,那么什么是存储设计的好方法 该应用程序是一个面向个人用户的任务管理web应用程序。它实际上是一个非常简单的应用程序。它有以下实体 帐户(每个用户都有一个帐户。) 任务(显然,用户创建任务。) 任务列表(用户可以将其任务组织到列表中。) 文件夹(用户可以将其列表组织到文件夹中。) 标记(用户可以为任务分配标记。) 我们还将构建一些功能

我正在评估Azure表存储在我正在构建的应用程序中的使用情况,我想得到一些关于

  • 这对于应用程序来说是否是一个好主意,或者
  • 如果我坚持使用SQL
  • 如果我使用ATS,那么什么是存储设计的好方法
  • 该应用程序是一个面向个人用户的任务管理web应用程序。它实际上是一个非常简单的应用程序。它有以下实体

    • 帐户(每个用户都有一个帐户。)
    • 任务(显然,用户创建任务。)
    • 任务列表(用户可以将其任务组织到列表中。)
    • 文件夹(用户可以将其列表组织到文件夹中。)
    • 标记(用户可以为任务分配标记。)
    我们还将构建一些功能/需求,我需要考虑这些功能/需求

    • 我们最终将为不同的帐户提供功能,以便彼此共享列表
    • 用户需要能够以各种方式过滤他们的任务。例如
      • 特定列表的任务
      • 标记为“a”和“B”的特定列表的任务
      • 明天到期的任务
      • 所有列表中标记为“A”的任务
      • 我共享的任务
      • 任务注释中包含“hello”的任务
      • 等等
    • 我们的应用程序是AJAX应用程序,任务的微小更改都会进行更新。因此,有很多小的请求和更新正在进行。例如
      • 内联编辑
      • 单击以完成
      • 更改到期日
      • 等等
    由于大量的积垢工作,以及我们确实有一个简单实体列表的事实,使用ATS是可行的。但是,我担心更新的事务成本,以及我描述的查询/过滤是否能够得到有效支持

    我们想象的数字开始很小(约数百个帐户,每个帐户约数百或数千个任务),但我们显然希望增加我们的帐户

    如果我们真的使用自动测试系统,是否最好有

    • 每个实体一个表(账户、任务、任务列表等)
    • 每个客户的表格集(JohnDoe_任务、JohnDoe_任务列表等)
    • 还有别的想法吗

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

    你问的是一个相当大的问题,如果我没有给你一个确切的答案,请原谅。。简单的回答是:当然,继续使用ATS:)

    在这种情况下,您最关心的是速度。正如您所指出的,您需要大量CRUD操作。开箱即用的ATS不支持Transactions,但您可以通过使用CQRS结构来构建自己,从而摆脱这种挑战

    使用SQL到ATS的最大区别在于缺乏关系和一般查询可能性,因为ATS是一种“NoSQL”方法。这意味着您必须以支持查询操作的方式构造表,这不是一项简单的任务

    如果你知道这一点,我认为做你描述的事情没有任何困难


    希望看到最终的结果

    Azure表存储非常适合任务应用程序。只要您设置好分区键和行键,您就可以在同时有大量用户的情况下获得快速一致的性能

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

    至于成本,您可以根据账户数量以及您期望这些账户的活跃程度来估算交易成本。因此,如果你预计有300个账户,每个账户每天编辑100次,那么你每天将有30000笔交易,每天的成本约为0.03美元,或者说每月不到1美元。即使这一估计值相差10倍,每月的交易成本仍然低于一家像样餐馆的一个汉堡包

    对于设计,需要考虑的主要方面是如何为表设置关键帧。在为ATS设计应用程序之前,我建议您阅读,特别是关于分区的部分。应用程序的一个合理设计是,每个实体类型(帐户、任务等)使用一个表,然后按帐户名称进行分区,并使用任务的某些独特特性作为行键。对于这两种关键类型,一定要考虑对未来查询的影响。例如,通过将可能一起更新的实体分组到同一分区中,您可以使用实体组事务在单个事务中更新多达100个实体——这不仅提高了速度,还节省了事务成本。对于键的另一个含义,如果用户倾向于一次查看单个文件夹,则可以使用行键存储文件夹(例如rowkey=“folder;unique task id”),并一次对文件夹进行非常高效的查询


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

    我认为您不能现实地期望用户确定什么适合您的业务需求,或者设计您的应用程序。给你。@Mitch:我只是想问,是否有其他人也经历过类似的决策过程,可以就表存储(NoSQL方法)提供任何建议。第9频道的云覆盖上有一个插曲,包括一个样本