Cassandra非规范化数据模型

Ste*_*fan 11 database join denormalization cassandra nosql

我读到在nosql(例如cassandra)中,数据通常存储为非规范化.例如,请参阅此SO答案或本网站.

例如,如果您有一系列员工和部门,并且您想要执行查询:select * from Emps where Birthdate = '25/04/1975' 那么您必须创建一个列系列birthday_Emps并将每个员工的ID存储为一列.那么你可以在birthday_Emps系列中查询密钥'25/04/1975',并立即获得该日出生的员工的所有ID.您甚至可以将员工详细信息归一化为birthday_Emps,以便您立即拥有员工姓名.

这真的是这样做的吗?

  1. 无论何时删除或插入员工,您都必须从birthday_Emps中删除该员工.在另一个例子中,有人甚至说过,有时你会遇到某种情况,一些表中的删除需要100个其他表中的删除.这真的很常见吗?

  2. 在应用程序代码中进行连接是否常见?您是否拥有允许您创建预先编写的应用程序以将来自不同查询的数据连接在一起的软件?

  3. 是否有处理这些数据模型问题的最佳实践,模式等?

Aar*_*ron 10

大多数情况下,"是",采用基于查询的数据建模方法确实是最好的方法.

  1. 这仍然是一个好主意,因为查询时间的速度使它值得.是的,还有更多的清理工作要做.我没有必要从其他列族执行100次删除操作,但偶尔会有一些复杂的清理工作要做.但是,你不应该在Cassandra中进行大量的删除(反模式).

  2. 不.客户端JOIN和分布式JOIN一样糟糕.整个想法是创建一个表来返回每个特定查询的数据...非规范化和/或复制...因此根本不需要进行JOIN.例外情况是,如果您正在运行OLAP查询以进行分析,则可以使用Apache Spark之类的工具来执行临时的分布式JOIN.但它绝对不是你想要在生产系统上做的事情.

  3. 我可以推荐一些文章: