我使用Azure表存储或SQL Azure作为我们的CQRS读取系统?

前端之家收集整理的这篇文章主要介绍了我使用Azure表存储或SQL Azure作为我们的CQRS读取系统?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们即将在内部实施我们的CQRS系统的Read部分,目的是大大提高我们的读取性能.目前,我们的读取是通过一个Web服务进行的,该服务针对规范化数据运行 Linq-to-SQL查询,涉及到sql Azure数据库的某种程度的反序列化.

我们的数据简化结构如下:

>用户
>对话(将消息分组到同一收件人)
>消息
>收件人(用户集)

我想将其移动到非规范状态,以便当用户请求查看从EITHER读取的消息的源:

Azure表存储中存在非规范化表示

> UserID作为PartitionKey
> ConversationID作为RowKey
>任何容易变化的易失性数据存储为实体
>在实体中序列化为JSON的消息
>所述消息的收件人在一个实体中序列化为JSON
>这个主要问题是表存储中的一行有限(960KB)
>“volatile data”列中的任何查询都会很慢,因为它们不是密钥的一部分

Azure表存储中保存的归一化表示

>对话详细信息,消息和收件人的不同表
>存储在对话表中的消息和收件人的分区密钥.
>酒吧吧这遵循与上述相同的结构
>获取最大行大小问题
>但是归一化状态会降低非规格化表的性能提升吗?

要么

sql Azure中持有的非规范化表示

> UserID&对话ID作为复合主键保存
>任何容易变化的易失性数据存储在单独的列中
>在列中序列化为JSON的消息
>所有邮件的收件人在列中序列化为JSON
>索引的最大灵活性和非规范化数据的结构
>性能比表存储查询慢得多

我问的是,有没有人有任何经验在Table Storage或sql Azure中实现非规范化的结构,你会选择哪一种?还是有更好的方法我错过了?

我的直觉说,表格存储中的数据的归一化(至少在一定程度上)将是要走的路;不过,我担心这样会降低性能提升,进行3次查询,以便获取用户的所有数据.

解决方法

考虑Azure表的主要驱动力是大大提高读取性能,根据您在sql Azure中存在的非规范化表示的最后一点,使用sql Azure的方案“慢得多”.我个人认为这是非常令人惊讶的,原因很多,并会要求详细分析这一说法.我的默认位置是,在大多数情况下,sql Azure会快得多.

以下是我对这项索赔的怀疑的一些原因:

> sql Azure使用本机/高效TDS协议返回数据; Azure表使用JSON格式,这是更详细的
>只要您在sql Azure中使用主键或具有索引,sql Azure中的连接/过滤器将非常快速; Azure表没有索引,连接必须在客户端执行
> Azure表返回的记录数限制(每次1,000条记录)意味着需要实施多次往返以获取许多记录

虽然您可以通过创建其他持有自定义索引的表来伪造Azure Tables中的索引,但您拥有维护该索引的职责,这将减缓您的操作,并且如果您不小心,可能会创建孤立方案.

最后但并非最不重要的是,当您尝试降低存储成本(比sql Azure更便宜)时,使用Azure表通常是有意义的,当您需要比sql Azure可以提供的更多存储空间(尽管现在可以使用联合中断单数据库最大存储限制).例如,如果您需要存储10亿个客户记录,则使用Azure Table可能有意义.但是,使用Azure表仅增加速度在我看来是相当可疑的.

如果我在你的鞋子,我会非常努力的质疑这个说法,并确保你有专家的sql开发技能的工作人员,可以演示您正在完成sql Server / sql Azure固有的性能瓶颈,完全改变您的架构.

此外,我将定义您的绩效目标.您是否正在浏览100倍的访问时间?你考虑过缓存吗?您在数据库中正确使用索引吗?

我的2美分…

猜你在找的MsSQL相关文章