Как развернуть изменения в 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 для более простого приложения. У (и есть) есть планы по большему количеству функций, но они работают хорошо, как есть на данный момент.