在cassandra中建模订单管理

时间:2012-10-09 07:41:54

标签: cassandra parent-child

我是cassandra&的新手在nosql建模中,我有一个用例,我想在其中建立一个订单管理解决方案,这是一个非常常见的用于RssMs到Cassandra的用例。在我们的用例中,我们的应用程序在不同的时间段内收到多个订单商品。每个都需要存储以供审计,并且需要进行分组以详细说明订单摘要和其他业务详细信息。此外,我们希望保持订单商品属性可搜索,以便可以查找。

我想到了两种方法:

1)基于复合关键模式:这里我将保存订单商品,所有订单商品属性为列,一个列系列'订单商品',关键为(orderid + timestamp)

  • oid1:01012012 - > oid:oid1,event:new,type:request,...
  • oid1:01012012 - > oid:oid1,event:ok,type:response,...
  • oid1:02012012 - > oid:oid1,event:modified,type:request,...

2)胖行设计:这里将orderid保存为行键,所有订单项都保存为json字符串。这将用于审计目的。另一个列族应该用于保持结构为(Rowkey - > colA1:a1,colB1:b1,colA2:a2,colB2:b2,...)和1,2 ..索引我们将能够跟踪所有订单商品。

我的一位朋友建议#1在表现上不会很好。由于具有相同orderid的不同行可以驻留在cassandra环的不同节点上。 虽然我发现#2是一个笨拙的设计,我需要保留相同数据的多个副本。也无法想象如何在#2设计之上实现搜索。

关于如何更好地设计它的任何想法?

1 个答案:

答案 0 :(得分:1)

您想要一个带有复合列的宽行(分区)。但是CQL3为您提供了一种比手动编译更简单的方法:http://www.datastax.com/dev/blog/schema-in-cassandra-1-1