我们通常在数据库中存储对象图。在rdbms中,我们需要使用male连接来重试对象之间的关系。在cassandra中,它被提升为非规范化模型以适合查询。但是,这样做,我们使模型的更新更复杂或更具指定性。 在Cassandra中,它存在复杂的数据类型,如set,map,list ou元组。通过在内部存储例如连接对象的ID的列表,这些类型使得能够以紧密的方式(关联,聚合,对象的组合)存储对象之间的关系。 唯一的缺点是必须在几个请求中划分sql complex join请求。 我没有看到关于cassandra处理这种解决方案的论文。有人想到这个解决方案没有被推广的原因吗?
答案 0 :(得分:2)
Cassandra是高度优化的数据库。因此写入是便宜的,这意味着考虑到如果不是这样,它会产生的困难,额外的三到四次写入几乎无关紧要。
关于对象的图形,答案是:否.Cassandra并不意味着存储对象的图形。 Cassandra用于存储查询数据。相当于RDBMS的是PostgreSQL中的视图。必须以可以轻松维护查询的方式存储数据。主要原因是读取速度很慢。 Cassandra中数据建模的目标是确保读取几乎总是来自单个分区。
如果它是规范化数据,则查询需要至少达到两个分区,最坏情况会产生延迟,导致应用程序无法用于任何实际目的。
因此,Cassandra中的数据建模始终以查询为中心,而不是对象之间的关系。
有关这些基本规则的更多信息,请参阅Datastax的文档
http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling