【发布时间】:2015-09-14 07:45:53
【问题描述】:
我熟悉(在新手级别)使用“宽行”和复合键/列的概念进行一对多建模)。
例如CREATE TABLE(A text, B text, C text static, D text, PRIMARY KEY ((A),B));
这将使 Cassandra 将数据存储在宽行中,因此可以使用一对多模型。这篇文章解释得很好:
http://www.ipponusa.com/blog/modeling-data-with-cassandra-what-cql-hides-away-from-you/
现在,假设我想将数据建模为聚合根,以采用 Eric Evans 域驱动设计概念,围绕该聚合根创建事务边界。一个例子:
一个订单有订单项目,这可以使用上面提到的 Cassandra 的复合键/列,使用开箱即用的“宽行”概念轻松建模。在这个模型中,我可以将客户信息、付款信息,当然还有订单商品作为“一对多关系”,全部存储在 Cassandra 行中。
但是,如果我希望聚合根比这更复杂一点怎么办?存储在一个 Cassandra 行中的聚合根具有两个不同的一对多“关系”,再举一个例子:
对象 A 有很多 B,A 也有很多 C。是否可以在 Cassandra 中使用组合键/列的“宽行”概念来表示这一点,并将这样的“聚合根”存储在一行中,然后能够履行“交易边界”合同?
【问题讨论】:
标签: cassandra one-to-many cql aggregateroot nosql