0

我有一个问题,我会很感激任何帮助。

假设我需要一个带有订单和列 OrderId、UserID、InsDate 的 cf。我需要获取用户的所有订单。

什么是最佳设计?在 UserID 上有一个索引并直接搜索 Order CF?或者创建一个 cf UserOrders 来保存每个用户的订单映射(以 UserID 作为行键)?

使用第二种方法,我将在 UserOrders 中搜索包含所有订单的用户行,然后从 Orders where OrderID IN () 中选择 *

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

4

1 回答 1

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]。)

于 2013-11-06T17:29:22.497 回答