create table users_by_id_name(
id int,
createdOn bigint, -- timestamp in millisec
name text,
age int,
primary key (id,name,createdOn)
)WITH CLUSTERING ORDER BY (name DESC, createdOn DESC);
上記の表定義を使用してユーザーを挿入します。 挿入クエリ -
insert into users_by_id_name (id,createdOn,name,age) values (1,100,'darthvedar',28);
ユーザを更新するために、同一のユーザIDと更新された名前とcreatedOn値で再度行を挿入します。
insert into users_by_id_name (id,createdOn,name,age) values (1,200,'obi-wan-kenobi',28);
クエリの下に、ユーザの使用を選択しながら -
ユーザIDによって選択 - 名前で
select * from users_by_id_name where id=1 limit 1;
選択ユーザ -
select * from users_by_id_name where name='obi-wan-kenobi' ALLOW FILTERING;
他の方法は、二次使用することですユーザー名のインデックス。ユーザー名はあまり頻繁に変更されないので、セカンダリインデックスも良い選択肢だと考えてください。コメントの後に
編集 -
ユーザー名に非常に頻繁に更新を持っている場合、2つの異なるテーブルを使用する方が良いでしょう。
create table users_by_id(
id int,
name text,
age int,
primary key (id)
);
create table users_by_name(
id int,
name text,
age int,
primary key (name)
);
挿入中、バッチステートメントを使用して両方のテーブルに挿入します。
希望すると、これが役立ちます。
"ユーザを更新するには、同じユーザIDと更新された名前とcreatedOn値を持つ行を再度挿入します。 - 主キーの新しい組み合わせを挿入しています。これにより、テーブルに新しいエントリが作成されます。既存のエントリは更新されません。 これは、すべてのエントリをすべて取得する場合に問題になります。 返信いただきありがとうございます。 – Sree
はい、私たちが最新のエントリを取るように、私たちのクエリではlimit 1を使用している理由です。 – Gunwant
何百万というレコードがあり、それらを更新して不要なデータのヒープを作成するときは、これは良いアプローチではないと思います。 – Sree