2014-12-23 3 views
5

У меня есть таблица, как это в CQL3Добавить столбцы динамически в Кассандре

create table product_info 
(
key text, 
value text, 
Primary key (key) 
); 

Это вертикальный стол. Так как я могу вставить новые строки с (ключ, значение).

Выборочные данные будут:

PRODUCT_INFO

key    |  value  
    ------------------------------------------- 
    product_name  | sample_product 
    quantity   | 2 
    manufacture  | sample_manufacturer 
    ....     .... 

Но что мне нужно, это горизонтальный стол, где я мог бы иметь возможность добавлять столбцы динамически без изменения таблицы.

PRODUCT_INFO

product_name  | quantity | manufacture   | .... 
    ------------------------------------------------------------------------------  
    sample_product | 2   | sample_manufacturer | .... 

мне нужна структура, как в таблице выше, необходимо продолжать добавлять столбцы на лету.

CQL3 предоставляет возможность динамически добавлять столбцы, но перед этим нам нужно изменить таблицу.

Мне нужно знать, есть ли другой способ, который позволяет это.

Я нашел, что с помощью бережливого api это возможно, но так как бережливость не поддерживается больше, не может этого использовать.

Есть ли какой-либо другой API, такой как hector или что-то еще, поддерживающее это?

Я прошел аналогичные переполнения стека, но я не получил лучшего решения.

+0

Моего первого, хотя были: Вы делаете это неправильно ™. Cassandra уже является хранилищем ключей/значений и может обрабатывать этот точный сценарий OOTB. По сути, вы имитируете хранилище ключей/значений в другом хранилище ключей/значений, что не имеет большого смысла, ИМХО. Итак, второй подход - это именно то, что вы должны делать, и то, что Cassandra может сделать в любом случае, если вы используете его правильно. Первый подход просто преувеличивает простые вещи. – JensG

ответ

3
CREATE TABLE product_info(
    product_name text, 
    key text, 
    value text, 
    PRIMARY KEY (product_name, key) 
); 

Теперь вы можете вставить до 2B k/v пар, потому что ключ теперь является столбцом кластеризации.

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'manufacturer', 'Apple'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2'); 

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'another column name', 'another column value'); 

Однако, вы не указали ваши шаблоны доступа для запроса, так что эта модель данных может быть совершенно неправильно (или ОК) для вашего приложения.

+0

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

+1

Hi Sunjith, C * - широкий колонка. «Строки» - это просто абстракция CQL лежащего в основе физического столбца. Если вы посмотрите на данные в 'cassandra-cli', вы увидите, что есть один ключ раздела, за которым следует столбец за столбцом. «Вертикальные строки» на CQL представляют собой столбцы с физически широким диапазоном. CQL - это не что иное, как абстракция, которая отображает физические широкие столбцы как вертикальные строки (похожие, но не такие же, как CTE в РСУБД). –

+0

@AkbarAhmed Я не думаю, что ваш ответ имеет отношение к его вопросу. В его примере ему все равно, как данные будут фактически сохранены на диске.Если вы выберете из такого CF, вы по-прежнему увидите вертикальную таблицу. Он спрашивает, как добавить столбцы в одну строку. Например, он может захотеть иметь версии firmareare как новые столбцы без значений. В таком примере, если вы выберете такой CF, вы получите широкий ряд данных. Насколько мне известно, это невозможно с CQL3. – I4004

0

Считаете ли вы, что используете карту?

create table products(
id text primary key, 
something text, 
attributes map<text, text> 
); 

См конца http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_collections_c.html

+0

Да, я просмотрел карту. Но я не думаю, что это лучшее решение. Так как это не похоже на то, что мое ожидание .. –

+0

Какое ваше ожидание? Вы можете добавлять новые ключи со значениями «на лету», и вы можете обновить значение для ключа. Внутри, cassandra поддерживает отображения, чтобы вы могли думать с точки зрения абстракции карты. – ashic