Выполнение предупреждения LOGGED BATCH в журналах Cassandra

Наше Java-приложение выполняет пакетную вставку в 1 таблицу. Эта схема таблицы выглядит примерно так.

CREATE TABLE "My_KeySpace"."my_table" (
    key text,
    column1 varint,
    column2 bigint,
    column3 text,
    column4 boolean,
    value blob,
    PRIMARY KEY (key, column1, column2, column3, column4)
) WITH CLUSTERING ORDER BY ( column1 DESC, column2 DESC, column3 ASC, column4 ASC )
AND COMPACT STORAGE
AND bloom_filter_fp_chance = 0.1
AND comment = ''
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 0
AND gc_grace_seconds = 0
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.1
AND speculative_retry = 'NONE'
AND caching = {
    'keys' : 'ALL',
    'rows_per_partition' : 'NONE'
}
AND compression = {
    'chunk_length_in_kb' : 64,
    'class' : 'LZ4Compressor',
    'enabled' : true
}
AND compaction = {
    'class' : 'LeveledCompactionStrategy',
    'sstable_size_in_mb' : 5
};

gc_grace_seconds = 0 в приведенной выше схеме. Из-за этого я получаю следующее предупреждение:

2019-02-05 01:59:53.087 WARN   [SharedPool-Worker-5 - org.apache.cassandra.cql3.statements.BatchStatement:97] Executing a LOGGED BATCH on table [My_KeySpace.my_table], configured with a gc_grace_seconds of 0. The gc_grace_seconds is used to TTL batchlog entries, so setting gc_grace_seconds too low on tables involved in an atomic batch might cause batchlog entries to expire before being replayed.

Я видел код Cassandra, это предупреждение по очевидным причинам находится по адресу: эта строка

Любое решение без изменения батч-кода в приложении?? Должен ли я увеличить gc_grace_seconds?


person Anil Kapoor    schedule 06.02.2019    source источник
comment
Это простые вставки?   -  person Alex Ott    schedule 06.02.2019
comment
да простые вставки!   -  person Anil Kapoor    schedule 06.02.2019


Ответы (1)


В Cassandra пакеты не являются способом оптимизации вставок в базу данных — они обычно используются в основном для координация записи в несколько таблиц и т. д. Если вы используете пакеты для вставки в несколько разделов, вы даже получите хуже производительность.

Более высокую пропускную способность для вставок можно получить за счет асинхронного выполнения команд (через executeAsync) и/или использования пакетов, но только для вставок, нацеленных на один и тот же раздел.

person Alex Ott    schedule 06.02.2019
comment
Все пакеты (незарегистрированные пакеты), предназначенные для нескольких разделов, отсутствуют в нашем приложении. Есть только зарегистрированные партии, нацеленные на один раздел. Также мы уже используем асинхронное выполнение для незарегистрированных пакетов, если таковые имеются. - person Anil Kapoor; 06.02.2019
comment
Если я правильно помню, пакеты, предназначенные для одного и того же раздела, преобразуются в незарегистрированные пакеты. - person Alex Ott; 06.02.2019
comment
Я думаю, что это неправильно в соответствии с этой странице , проверьте пожалуйста, может я ошибаюсь. - person Anil Kapoor; 06.02.2019
comment
вот пример одного раздела против пакетов с несколькими разделами: github.com/alexott/dse-java-playground/blob/master/src/main/ - person Alex Ott; 06.02.2019
comment
хотя мне нужно проверить gc_grace_period - person Alex Ott; 06.02.2019