我有一个问题,我将不胜感激。
假设我需要一个带订单的cf,以及OrderId,UserID,InsDate列。 我需要获得用户的所有订单。
最佳设计是什么? 有一个UserID索引并直接搜索订单CF? 或者创建一个cf UserOrders,它将保存每个用户的订单地图(用户ID作为行键)?
使用第二种方法,我会在UserOrders中搜索用户所有订单的行,然后从订单中选择*,其中订单ID为IN()
我已经读过,当数据和客户端增长时,第二种方法会表现得更好,因为每个选择只会在CF行键上运行。 感谢
答案 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]
测试。)