ColumnFamily Design:第二个CF中的索引或映射?

时间:2013-11-06 15:58:56

标签: cassandra

我有一个问题,我将不胜感激。

假设我需要一个带订单的cf,以及OrderId,UserID,InsDate列。 我需要获得用户的所有订单。

最佳设计是什么? 有一个UserID索引并直接搜索订单CF? 或者创建一个cf UserOrders,它将保存每个用户的订单地图(用户ID作为行键)?

使用第二种方法,我会在UserOrders中搜索用户所有订单的行,然后从订单中选择*,其中订单ID为IN()

我已经读过,当数据和客户端增长时,第二种方法会表现得更好,因为每个选择只会在CF行键上运行。 感谢

1 个答案:

答案 0 :(得分:0)

如果你的目标是获得用户的所有订单,那么使用第一种方法是有意义的,例如,

表格创建:

create table orders(
  userid int, 
  orderid int, 
  insDate timeuuid,
  primary key(userid,orderid)
);

插入:

insert into orders(userid, orderid, insDate) VALUES(1, 1, now());
insert into orders(userid, orderid, insDate) VALUES(1, 2, now());
insert into orders(userid, orderid, insDate) VALUES(2, 3, now());
insert into orders(userid, orderid, insDate) VALUES(3, 4, now());

查询:

 >select userid,dateof(insdate),orderid from orders where userid in(1,2);

userid | dateof(insdate)          | orderid
--------+--------------------------+---------
      1 | 2013-11-06 17:26:56+0000 |       1
      1 | 2013-11-06 17:26:59+0000 |       2
      2 | 2013-11-06 17:27:02+0000 |       3

(3 rows)

(经[cqlsh 4.0.1 | Cassandra 2.0.1 | CQL spec 3.1.1 | Thrift protocol 19.37.0]测试。)