Используя Cassandra и CQL3, как вставить всю широкую строку в один запрос?
Я хочу вставить одну строку с 50000 столбцов в Cassandra 1.2.8. Перед вставкой у меня есть все данные для всей строки, готовые к отправке (в памяти):
+---------+------+------+------+------+-------+
| | 0 | 1 | 2 | ... | 49999 |
| row_id +------+------+------+------+-------+
| | text | text | text | ... | text |
+---------+------+------+------|------+-------+
Имена столбцов являются целыми числами, что позволяет срезы для разбиения на страницы. Значения столбца представляют собой значение по этому конкретному индексу.
Определение таблицы CQL3:
create table results (
row_id text,
index int,
value text,
primary key (row_id, index)
)
with compact storage;
Поскольку у меня уже есть row_id и все 50000 пар имя / значение в памяти, я просто хочу вставить одну строку в Cassandra за один запрос / операцию, чтобы она была максимально быстрой.
Единственное, что я могу найти, это выполнить следующие 50 000 раз:
INSERT INTO results (row_id, index, value) values (my_row_id, ?, ?);
первый?
это счетчик индекса (i
) и второй?
текстовое значение для хранения в местоположенииi
.
Это занимает много времени. Даже когда мы помещаем вышеупомянутые ВСТАВКИ в пакет, это занимает много времени.
У нас есть все данные, которые нам нужны (полная строка) во всей их полноте, я бы предположил, что очень легко просто сказать «здесь, Кассандра, сохранить эти данные как одну строку в одном запросе», например:
//EXAMPLE-BUT-INVALID CQL3 SYNTAX:
insert into results (row_id, (index,value)) values
((0,text0), (1,text1), (2,text2), ..., (N,textN));
Этот пример невозможен через текущий синтаксис CQL3, но я надеюсь, что он иллюстрирует желаемый эффект: все будет вставлено как один запрос.
Можно ли сделать это в CQL3 и драйвере Java DataStax? Если нет, то я полагаю, что меня заставят использовать Гектора или драйвер Astyanax и Thrift.batch_insert
операция вместо?