使用DocumentDb设计会话系统时,重复所有相关方的会话详细信息是否是个好主意?
我使用用户名的第一个字母表实现了分片。现在,用户A向F,I和Z发送消息。由于这些用户是不同集合的一部分(由于分片),因此在每个集合中重复消息细节。这种设计可以帮助我快速阅读(因为我需要去一个地方才能显示历史记录)。但是写作可能很乏味,因为我必须写到多个位置。
所以,我的问题是在使用DocumentDb构建此类系统时,我们可以重复细节吗?或者,为细节集中收集并维护每个用户集合的id部分是一个好主意吗?
请帮忙。
谢谢你, 索玛。
答案 0 :(得分:2)
您所谈论的内容类似于完全标准化和部分非规范化数据建模之间的权衡,尽管由于收集问题不同,即使这样也不完美。也就是说,我认为在这种情况下,关于非规范化的答案仍然存在,"它取决于。"
通过指出您更快地进行读取,您正在考虑正确的术语。
然而,我的建议是不进行非规范化,除非你从生产中得到完全正常化的证据不够快,而且非正规化的实验更快。每次非规范化都会增加数据损坏的风险,因此解决这类错误是非常棘手的。你试过把它存放在一个地方吗?这够快吗?你做过一个让你认为这种非规范化更快的实验吗?
此外,在这种情况下,我对性能有相反的本能。如果你必须发出两个查询并且它们遇到不同的集合而不是一个,我会期望你的吞吐量上升,并且你的组合操作的延迟会下降,假设你并行运行它们。
答案 1 :(得分:0)
在我看来,你是在对用户进行分区,这是否适合通过对话对Id进行分区?然后,您可以跟踪userId上的对话。将需要一个额外的电话来获得对话ID,但是一旦你拥有它,你应该全部设置。