我熟悉(在新手级别上)使用"宽行"的概念进行一对多建模。和复合键/列)。
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中表示这一点。概念使用复合键/列并存储这样的"聚合根"在一行中,然后能够实现"交易边界"合同?
答案 0 :(得分:0)
我不熟悉Eric Evans Domain Driven Design概念,但您可能想要查看Cassandra中的集合类型(即set,list和maps)。它们允许您在一行中表达多个一对多关系。
您可以创建用户定义的类型(即数据字段的结构),然后在集合中使用它们。这允许您在单行中创建一个小数据库,并且可以解决在Cassandra中没有连接的问题。
有关示例,请参阅this。