Используя 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 и Thriftbatch_insert
операция вместо?