0

質問があります。助けていただければ幸いです。

注文と列 OrderId、UserID、InsDate を含む cf が必要だとしましょう。ユーザーのすべての注文を取得する必要があります。

最適な設計は何でしょうか? UserID にインデックスを付けて、Order CF を直接検索しますか? または、UserID を行キーとして、ユーザーごとの注文のマップを保持する cf UserOrders を作成しますか?

2 番目のアプローチを使用して、UserOrders ですべての注文を含む User の行を検索し、次に OrderID IN () の Orders から * を選択します。

各選択はCF行キーのみで実行されるため、データとクライアントが大きくなると、2番目のアプローチのパフォーマンスが向上することを読みました。ありがとう

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 に答える