Контекст
У меня есть только один узел Cassandra, локально установленный на моем P C с Windows 10 (Core i5, 16 ГБ ОЗУ, накопитель SSD).
Я создал таблица, подобная этой:
CREATE KEYSPACE covid19 WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '1'
};
CREATE TABLE covid19.cases (
pesel text,
test_date date,
result boolean,
PRIMARY KEY ((pesel), test_date)
)
WITH CLUSTERING ORDER BY (test_date DESC);
pesel
- это уникальный 10-значный идентификатор человека.
Затем я сгенерировал 10 000 строк образцов данных, которые выглядят так:
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000001', '2020-03-10', true);
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000002', '2020-03-10', false);
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000003', '2020-03-10', false);
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000004', '2020-03-12', false);
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000005', '2020-03-12', false);
INSERT INTO cases (pesel, test_date, result) VALUES ('0000000006', '2020-03-12', false);
...
Наконец, я загрузил данные, используя cql sh: source 'cases.cql';
Задача 1
Для загрузки 10 000 строк требуется 51 секунда. Это нормально?
Я ожидал, что вставки в Cassandra будут очень быстрыми, хотя это довольно сравнимо с SQLite без транзакции (59 с). Если я обертываю вставки с BEGIN
& COMMIT
в SQLite, это займет меньше секунды. Это приводит нас к другой проблеме ...
Задача 2
Пакетная вставка. Медленная пакетная вставка. Для одного раздела, на одном узле.
Я обернул вставки с BEGIN BATCH
и APPLY BATCH;
. После этого source
заняло так много времени, я перестал измерять после прохождения 4-минутной отметки.
Да, я знаю о неправильном использовании пакетных вставок. Насколько я понял, использование пакетной вставки - это анти-шаблон, если для этого потребуются вставки в разные разделы, что имеет смысл. Это не тот случай.
Почему пакетная вставка так медленно выполняется на одном узле (то есть на одном разделе)?
Что мне здесь не хватает?