据我了解,在noSQL中,数据应该重复。因此,例如,如果您有一个用户表和一个帖子表,您可以像往常一样将用户的信息存储在用户表中,但是您可以将相关的用户数据存储在帖子表。
问题1:我的理解是否正确?
问题2:如果是,那就意味着如果我更改用户详细信息,我会对所有受影响的帖子条目进行更新?
答案 0 :(得分:5)
从Cassandra的角度来看,它主要取决于您需要有效支持的查询。查询帖子时,您还需要用户数据吗?如果是这样,在存储帖子的位置包含所需数据通常会更有效。
对于问题1,是的,在许多情况下,您所描述的是常见做法,但这取决于应用程序的需求。
对于问题2,这也是一个应用问题。如果您预见用户数据会定期更改,那么您的应用程序应该在显示帖子时执行查找到users表。但是,如果引入过多的读取以及时显示所需的帖子,则在帖子数据中包含用户数据意味着需要在两个位置更改用户数据。但重要的是要询问历史数据是否需要改变。例如,如果您在Twitter上更改了用户名,则它不会返回并更新您之前对新用户名的所有引用。这是一个应用程序选择。您预期的用户数据可能会发生什么变化?如果用户名更改,您希望新值在所有以前的帖子中反映出来,那么该更改需要多长时间?是应该立即反映,还是等待批处理来处理它?</ p>
要理解的重要一点是,如何执行有效的查询并理解在我们非规范化以实现高性能应用程序时所做的参照完整性权衡。在设计数据模型时,请始终考虑应用程序查询模式。