我是 cassandra 和 nosql 建模的新手,我有一个用例,我希望在其中建模一个订单管理解决方案,这是 RDBM 到 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 设计之上实现搜索。
关于如何设计得更好的任何想法?