难道我使用Azure Table中存储或SQL Azure的为我们的CQRS读取系统?(Do I u

2019-07-30 08:10发布

我们看好其目标是,以大大提高我们的读取性能,从而实现公司内部的CQRS系统的读取部分。 目前,我们读通过这是违背标准化数据的LINQ到SQL查询,涉及与SQL Azure数据库一定程度的反序列化的Web服务进行。

我们的数据的简化结构为:

  • 用户
  • 会话(消息分组到同一收件人)
  • 信息
  • 收件人(组用户)

我想这个移动到非规范化的状态,这样当用户请求看到它无论从读取消息的饲料:

在Azure Table中存储持有非标准化的表示

  • 用户ID作为PartitionKey
  • 的conversationId为RowKey
  • 易发生任何易失性数据,以改变存储作为实体
  • 在实体序列化为JSON消息
  • 表示邮件的收件人在实体序列化为JSON
  • 的主要问题与该表存储行的有限尺寸(960KB)
  • 还对“可变数据”栏目有任何疑问将是缓慢的,因为他们不是关键的一部分

在Azure的表存储召开标准化表示

  • 不同的表谈话的细节,消息和收件人
  • 对于消息分区键和收件人存储在会话表。
  • 栏; 这遵循与上述相同的结构
  • 围绕获取的最大行大小问题
  • 但将归国家减少非规范化表的性能提升?

要么

在SQL Azure中举行的一次非正规化表示

  • 用户ID&的conversationId保持为一个复合主键
  • 易发生任何易失性数据,以改变存储在单独的列
  • 在列序列化为JSON消息
  • 所述消息的接收者在一个列序列化为JSON
  • 用于索引最大的灵活性和非规范化的数据的结构
  • 比表存储查询的性能要慢得多

什么我问的是,是否有人有执行表存储或SQL Azure的非规范化结构的任何经验,你会选择哪个? 还是有更好的方法,我已经错过了?

我的直觉说,在表存储归一化(至少在一定程度上)数据将要走的路; 但是我担心它会降低性能提升为了抢一个用户的所有数据进行3个查询。

Answer 1:

您的考虑Azure的表主要驱动力是大大提高读取性能,并使用SQL Azure的您的情况是“慢得多”,按照下的“在SQL Azure中举行的一次非正规化表示”您的最后一个点。 我个人觉得这几个原因非常令人惊讶,也请对这个说法是怎么做的详细分析。 我的默认位置将是在大多数情况下,SQL Azure的会更快。

这里有一些原因,我的要求的怀疑:

  • SQL天青使用本地/高效TDS协议返回数据; Azure的表使用JSON格式,这是更详细的
  • 加入/过滤器在SQL Azure中会非常快,只要你使用的主键或在SQL Azure的指标; Azure的表没有索引,并加入必须执行客户端
  • 在湛蓝的表返回的记录数限制(1000条记录在一个时间)意味着你需要实现多次往返获取多条记录

虽然你可以在Azure的假表的索引通过创建持有定制指数的附加表,你自己维护该索引,这将减缓你的操作,并可能创造孤儿的情况,如果你不小心的责任。

最后但并非最不重要的,使用Azure的表通常使当你试图减少你的存储成本感(它比SQL Azure的便宜),当你需要比SQL Azure中可以提供更多的存储空间(虽然你现在可以使用联邦打破单个数据库最大存储限制)。 例如,如果您需要来存储一个十亿用户记录,使用Azure Table中可能是有意义的。 但是,使用Azure的表单独增加的速度是在我的脑海相当可疑。

如果我是你的话我会质疑这种说法非常努力,并确保你对工作人员的专家SQL开发技能,能够证明你完全改变你的架构之前达到固有的SQL Server / SQL Azure的性能瓶颈。

此外,我会定义你的性能目标。 你在看快100个的访问时间? 你有没有考虑缓存呢? 您是否使用正确的索引在数据库中?

我的2美分... :)



文章来源: Do I use Azure Table Storage or SQL Azure for our CQRS Read System?