#migration #cql #cassandra #scylla #cassandradb

cqlmig-cdrs-tokio

CDRS Tokio客户端实现cqlmig

1个不稳定版本

0.0.1 2023年2月9日

#29#scylla

MIT/Apache

36KB
603

CQL迁移器

在CQL数据库(Casandra或ScyllaDB)上运行迁移。

此crate处于alpha版本!请谨慎使用!

cqlmig简单地按提供的顺序在数据库上运行一系列迁移,以下是一些注意事项/保证:

  • 迁移按顺序排序并运行。
  • 迁移只运行一次。
  • 没有锁/事务,请确保从单个实例运行迁移。
  • 没有事务,损坏的迁移不会被回滚。
  • 不支持批处理语句,这主要是因为文件解析的方式很随意。
  • 多次调用 migrate 且版本顺序不正确不会产生错误,除非数据库产生错误。换句话说,cqlmig在运行较旧版本之后不会产生错误。这种情况通常发生在将较旧的分支与较旧的迁移合并时。理想情况下,你希望在PR中捕获此场景,或者更好的是让你的管道失败,而不是在运行时恐慌。不是在为其辩护;如果您的需求不同,我很乐意添加一个选项标志。
  • 不支持多行注释。
  • CQL语句必须用 ';' (分号) 和 '\n' (换行符) 分隔。
  • 所有内容都读入内存,当有大量大型迁移时可能会消耗一些资源。
  • 文件I/O不是异步的。
  • 还有很多其他...
extern crate core;
use std::borrow::Borrow;
use std::error::Error;
use std::path::Path;
use cdrs_tokio::cluster::NodeTcpConfigBuilder;
use cdrs_tokio::cluster::session::{SessionBuilder, TcpSessionBuilder};
use cdrs_tokio::load_balancing::RoundRobinLoadBalancingStrategy;
use cqlmig_cdrs_tokio::{CdrsDbSession, CqlMigrator, DbSession, Migration};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
   let cluster_config = NodeTcpConfigBuilder::new()
       .with_contact_point(String::from("localhost:9042").into())
       .build()
       .await
       .unwrap();

   let db = TcpSessionBuilder::new(
       RoundRobinLoadBalancingStrategy::new(),
       cluster_config)
       .build()
       .unwrap()
       .borrow()
       .into();

   CqlMigrator::default()
       .with_logger(|s| println!("{}", s))
       .migrate(&db, Migration::from_path(Path::new("/migrations").into()).unwrap())
       .await?;
   Ok(())
}

许可证

该项目许可协议为以下之一:

任选其一。

依赖关系

~16–28MB
~503K SLoC