Как я могу записать свои данные с помощью Cassandra? - PullRequest
0 голосов
/ 15 января 2019

Я хочу использовать функцию пары ключ-значение в Cassandra. До сих пор я использовал Kyotocabinet, но он не поддерживает множественные записи, и поэтому я хочу использовать Cassandra для управления версиями моих табличных данных.

Roll No, Name, Age, Sex
14BCE1008, Aviral, 22, Male
14BCE1007, Shantanu, 22, Male

Приведенные выше данные являются табличными (CSV). Это версия 1. Следующая версия 2:

Roll No, Name, Age, Sex
14BCE1008, Aviral, 22, Male
14BCE1007, Shantanu, 22, Male
14BCE1209, Piyush, 22, Male

Следовательно, я бы назвал вышеуказанную версию версией 2 со следующим diff: insert_patch: 14BCE1209 в качестве ключа (PK) и 14BCE1209, Piyush, 22, Male в качестве значения. Я знаком с созданием таблицы, но не могу выяснить версию управления версиями.

1 Ответ

0 голосов
/ 15 января 2019

Наличие нескольких версий данных в вашей таблице, если вы используете составной первичный ключ вместо первичного ключа, состоящего из одного поля.

Таким образом, определение таблицы может выглядеть следующим образом (если вы «знаете» номер версии до вставки данных):

create table test( 
  id text,
  version int,
  payload text,
  primary key (id, version)
) with clustering order by (version desc);

и вставка данных в виде:

insert into test (id, version, payload) values ('14BCE1209', 1, '....');
insert into test (id, version, payload) values ('14BCE1209', 2, '....');

, чтобы выбрать последнее значение для данного ключа, вы можете использовать LIMIT 1:

SELECT * from test where id = '14BCE1209' LIMIT 1;

и для выбора последних версий для всех разделов (не рекомендуется, например, нужен особый подход для эффективной обработки):

SELECT * from test PER PARTITION LIMIT 1;

Но это будет работать только в тех случаях, когда вы заранее знаете версию. Если вы не знаете, тогда вы можете использовать timeuuid тип для версии вместо int:

create table test( 
  id text,
  version timeuuid,
  payload text,
  primary key (id, version)
) with clustering order by (version desc);

и вставка данных как (вместо now() вы можете использовать текущую временную метку, сгенерированную из вашего кода):

insert into test (id, version, payload) values ('14BCE1209', now(), '....');
insert into test (id, version, payload) values ('14BCE1209', now(), '....');

и select будут работать так же, как указано выше ...

...