В настоящее время я использую ScyllaDB в своей среде и по техническим причинам изучаю возможность перехода на Cassandra. Я пытаюсь заставить cassandra-stress загрузить кластер Cassandra данными, используя схему, возможно, идентичную той, которая в настоящее время используется в ScyllaDB. К сожалению, есть некоторые проблемы.
Окружение:
- ScyllaDB 3.0.7 (= Cassandra 3.0.8) работает в Ubuntu 18.04
- Cassandra 3.11.4 работает на Ubuntu 18.04
- cassandra-stress 3.0.18 (часть
cassandra-tools
pkg), работающая на Ubuntu 18.04
Процесс выглядит следующим образом:
- дамп схемы из ScyllaDB (
desc keyspace_name
) - подготовить файл yaml cassandra-stress - одно пространство ключей, всего пять таблиц
- запустить cassandra-stress (
cassandra-stress user profile=schema.yml cl=QUORUM duration=30s 'ops(insert=1)' -node 172.19.11.9 -rate threads=1
)
Чтобы убедиться, что нет проблем, связанных с пространством ключей, каждый запуск cassandra-stress выполняется в новом пространстве ключей (я увеличиваю имя).
Теперь, когда схема составляет 1: 1, как та, что выгружена из Scylla, определение двух таблиц (и только этих двух) приводит к сбою инструмента стресса: com.datastax.driver.core.exceptions.SyntaxError: line 1:35 no viable alternative at input 'WHERE' (UPDATE "activities_bp_action" SET [WHERE]...)
.
Определения таблиц следующие:
table: activities_bp
table_definition: |
CREATE TABLE activities_bp (
business_profile_id int,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY (business_profile_id, create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
table: activities_bp_action
table_definition: |
CREATE TABLE activities_bp_action (
business_profile_id int,
action text,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY ((business_profile_id, action), create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
Если две строки, содержащие PRIMARY KEY
и CLUSTERING ORDER
, заменить следующим, cassandra-stress работает нормально без ошибок и начинает заполнять кластер данными. Однако определения теперь отличаются от определений из ScyllaDB:
PRIMARY KEY (event_uuid, create_date)
) WITH CLUSTERING ORDER BY (create_date DESC)
Теперь, после того как cassandra-stress запускается с измененным определением, я могу вернуться к немодифицированному (тому, которое раньше терпело неудачу). Если запустить в уже существующем пространстве ключей, yaml теперь работает нормально и заполняет кластер данными. Это может означать, что проблема возникает при создании таблиц?
Мне не удалось найти полный запрос, который cassandra-stress отображает в своей трассировке стека, как при запуске cassandra-stress, так и Cassandra в режимах отладки, и этот запрос немного меня озадачивает.
Есть идеи, почему возникает проблема? Спасибо!
изменить:
Прикрепление schema.yml
: https://gist.github.com/schybbkoh/76cdbf19a2bb933419063526ff5ac44f
изменить:
Как оказалось, схема «работает нормально, без ошибок и начинает заполнять кластер данными» создает и заполняет данными только последнюю таблицу, определенную в схеме. Здесь что-то не так.
schema.yml
тоже не повредит - person dyasny   schedule 22.10.2019schema.yml
был прикреплен к исходному сообщению. Чтоentire config
вы имеете в виду, Кассандра? - person theo   schedule 23.10.2019