一个Cassandra行来存储一个复杂的聚合根模型,这是不可能的?

时间:2015-09-14 07:45:53

标签: cassandra one-to-many cql aggregateroot nosql

我熟悉(在新手级别上)使用"宽行"的概念进行一对多建模。和复合键/列)。

E.g。 CREATE TABLE(文本,B文本,C文本静态,D文本,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,A也有很多C' s。是否可以使用"宽行"在Cassandra中表示这一点。概念使用复合键/列并存储这样的"聚合根"在一行中,然后能够实现"交易边界"合同?

1 个答案:

答案 0 :(得分:0)

我不熟悉Eric Evans Domain Driven Design概念,但您可能想要查看Cassandra中的集合类型(即set,list和maps)。它们允许您在一行中表达多个一对多关系。

您可以创建用户定义的类型(即数据字段的结构),然后在集合中使用它们。这允许您在单行中创建一个小数据库,并且可以解决在Cassandra中没有连接的问题。

有关示例,请参阅this