Семейство колонн Cassandra Dynami c - PullRequest
2 голосов
/ 13 февраля 2020

Я новичок в Кассандре, и я прочитал несколько статей о семействе столбцов stati c и Dynami c. Упоминается, что из таблицы Cassandra 3 и семейства столбцов совпадают.

Я создал пространство ключей, несколько таблиц и вставил данные в эту таблицу.

CREATE TABLE subscribers(
 id uuid,
 email text,
 first_name text,
 last_name text,
 PRIMARY KEY(id,email)
);

INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'Test@123.com','Test1','User1');
INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'Test2@222.com','Test2','User2');
INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'Test3@333.com','Test3','User3');

Кажется, все работает нормально.

Но мне нужно создать семейство динамических c столбцов только с типами данных и без предопределенных столбцов.

С помощью запроса вставки у меня могут быть разные аргументы, и таблица должна быть вставлена.

В статьях упоминается, что для семейства динамических столбцов c нет необходимости создавать схему (предопределенные столбцы). Я не уверен, возможно ли это на Кассандре или мое понимание неверно.

Дайте мне знать, возможно ли это или нет? если возможно Просьба привести несколько примеров.

Заранее спасибо.

1 Ответ

1 голос
/ 13 февраля 2020

Я думаю, что статьи, на которые вы ссылаетесь, были написаны в первые годы Кассандры, когда она основывалась на протоколах Thrift. Язык запросов Cassandra был введен много лет назад go, и теперь это способ работать с Cassandra - Thrift устарел в Cassandra 3.x и полностью удален в 4.0 (пока не выпущен).

Если вам действительно нужно иметь полностью динамический c материал, тогда вы можете попытаться эмулировать это, используя таблицу со столбцами в виде сопоставлений от текста к указанному типу c, например:

create table abc (
  id int primary key,
  imap map<text,int>,
  tmap map<text,text>,
  ... more types
);

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

другой подход заключается в хранении данных в виде отдельных строк:

create table xxxx (
  id int,
  col_name text,
  ival int,
  tval text,
  ... more types
  primary key(id, col_name));

затем вы можете вставить отдельные значения в виде отдельных столбцов:

insert into xxxx(id, col_name, ival) values (1, 'col1', 1);
insert into xxxx(id, col_name, tval) values (1, 'col2', 'text');

и выбрать все столбцы как:

select * from xxxx where id = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...