Как развернуть изменения в CQL-схеме Cassandra

У нас есть приложение, которое использует Cassandra для своей базы данных. Как мы должны внедрять изменения схемы в живой производственной среде.

В разработке мы просто продуваем базу данных и воссоздаем ее с помощью "database.cql" script, хранящейся в контроле версий. Это явно не решение в производстве.

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

Как решить ту же проблему в Cassandra?

Ответ 1

Поскольку не было существующего инструмента, я в конечном итоге написал его.

Он называется cql-migrate и предоставляет дополнительные обновления для развернутой схемы Cassandra.

[update] С момента написания этого вопроса я нашел еще пару вариантов: один для для рельсов и другое для go

Ответ 2

Здесь я начал и использовал некоторое время.

https://github.com/heartysoft/aedes

Он поддерживает несколько сред и версий. Поскольку мы основаны на Windows, это в основном powershell, но нет причин, по которым bash script не может быть написано для выполнения эквивалента. Сама оболочка script очень проста. Это требует Powershell v3+. Использование довольно просто:

aedes.ps1 192.168.40.4 [-u username -p password -env dev]

будет искать файлы схемы в папке.. \schema. Ожидается, что файлы схемы будут иметь префикс n_. Файлы, специфичные для среды, имеют постфикс .env.cql. Итак, если файлы:

1_people.dev.cql
1_people.prod.cql
2_people_some_indexes.cql
3_jobs.dev.cql
3_jobs.prod.cql
4_jobs_something_changed.cql

И запустите его для prod, а затем с .prod.cql и никаким "env".cql будут применяться по порядку. Вы также можете указать $start версию, которая может использоваться для указания, с чего начать приложение (например, если начало указано как 3, то все, что должно быть с 1_ и 2_, будет пропущено).

Это довольно простой, но, похоже, работает неплохо. Мы просто загружаем Cassandra (не установлена) на "машину-аппликатор" (которая может быть вашей машиной, т.е. Не является частью кластера) и имеет cqlsh для PATH для более простого приложения. У (и есть) есть планы по большему количеству функций, но они работают хорошо, как есть на данный момент.