9 个版本
0.0.9 | 2024年4月15日 |
---|---|
0.0.8 | 2024年4月15日 |
0.0.2 | 2023年10月4日 |
0.0.1 | 2023年5月15日 |
#787 in 数据库接口
每月 336 次下载
320KB
8K SLoC
Cassandra 和 ScyllaDB 的版本化 CQL 迁移
创建一个包含 CQL 文件的目录。使用 Cquill 在本地进行开发。然后使用 Cquill 对数据库部署进行版本控制、打包和发布。
欢迎投资。
迁移命令
cquill migrate
使用 ./cql
目录中的 cql 源执行迁移。
CQL 文件使用 3 位数字版本前缀进行版本控制,指定为 v001
或 V001
,并且必须进行顺序版本控制。 v001-create-api-keyspace.cql
是有效的,而 v8.cql
是无效的。
在发生 CQL 语句错误的情况下,Cquill 将停止执行文件中的语句,并报告哪个语句失败。此时修复是一个手动过程,并且 Cassandra 的错误消息中包含了指导。
迁移历史记录存储在名为 cquill.migrated_cql
的表中,每个完成的 CQL 文件都有一个 md5 哈希记录。未来的迁移将验证先前迁移的 CQL 文件与 md5 哈希。这一步骤确保了正确性,并防止了可能导致数据完整性问题的迁移。
使用 cquill help migrate
获取参数。迁移历史记录表的键空间、名称和复制可以通过迁移命令的参数进行配置。
入门
使用 Cargo 本地安装
Cargo 将使用 install 构建最新发布的 Cquill 版本
cargo install cquill
Cargo 发布的版本在 crates.io/crates/cquill 上详细说明。
在 Docker 容器中运行带有本地 CQL 源的迁移
镜像 84tech/cquill
将在其 /cquill/cql
目录中迁移 CQL 源(在 Cquill 的 Dockerfile 中有文档说明)。
这种方法需要指定 CASSANDRA_NODE
环境变量以匹配 Cassandra 的主机名和 Docker 网络
docker run -it --rm -v $(pwd)/cql:/cquill/cql:ro -e CASSANDRA_NODE=cassandra --network my_network 84tech/cquill migrate
创建版本化 CQL 源的 Docker 镜像
在 CI/CD 自动化的容器化环境中,对工件进行版本控制是工作流程自动化的理想选择。将发布的 CQL 源 ./cql
相对于 WORKDIR
复制。
FROM 84tech/cquill
WORKDIR /
COPY cql cql
给定一个 ./cql
目录和一个 cql.Dockerfile
构建清单,使用Docker构建一个版本化的镜像,以便与API协同部署。
docker build -t my-api-cql:0.0.1 -f cql.Dockerfile .
贡献
Rust 和 Docker 是 Cquill 的唯一开发依赖。
使用 docker compose up -d --wait
启动一个 ScyllaDB 实例,用于运行 cargo test
。
拉取请求的 CI 检查详细说明在 verify.yml 工作流程中。此工作流程运行
cargo fmt
cargo clippy -- -D warnings
cargo test
cargo build --release
路线图
这是一份我希望在未来添加的令人愉快的功能列表
cquill verify
命令验证 CQL 文件名、CQL 连接以及先前迁移的 CQL 文件的 md5 哈希。cquill doctor
命令纠正迁移历史和 md5 哈希。cquill dev
命令使用文件监视在积极开发期间删除并重新创建 keyspaces 和表。- 支持
v001.dev.cql
或类似开发注释的文件名,以用数据填充开发环境。 - 为 CQL 语句创建一个 AST,以支持更多附加功能。
- 在迁移期间重写 keyspaces 名称,以创建系统 keyspaces 的并行部署(用于隔离测试很有用)。
- 在执行对实时数据库的操作之前验证 CQL 语句的语法。
- 为 CQL 语句解析特定行和列数据以供命令输出。
- 反转 CQL 语句,例如将创建列的
ALTER TABLE
语句反转以删除列,以便在错误阻止 CQL 文件完成之前撤销之前执行的语句。
依赖关系
~13–24MB
~331K SLoC