我们看好其目标是,以大大提高我们的读取性能,从而实现公司内部的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个查询。