帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Cassandra  evo  数据  apache-cassandra  tool  Apache  CAS  数据库迁移  
Database migration tool for Apache Cassandra

  • 源代码名称:cassandra-migration
  • 源代码网址:http://www.github.com/Contrast-Security-OSS/cassandra-migration
  • cassandra-migration源代码文档
  • cassandra-migration源代码下载
  • Git URL:
    git://www.github.com/Contrast-Security-OSS/cassandra-migration.git
  • Git Clone代码到本地:
    git clone http://www.github.com/Contrast-Security-OSS/cassandra-migration
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Contrast-Security-OSS/cassandra-migration
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • Cassandra迁移

    Apache的一个简单而轻量级的迁移工具,它是基于fontaine项目的 Flyway。 Cassandra迁移工作就像 Flyway。 支持普通的CQL和基于Java的迁移。 Java移植接口提供了 Java的datastax驱动程序会话。

    为什么不为现有的流行数据库迁移项目创建扩展( 例如。 Flyway )?

    流行的数据库迁移工具,比如Flyway和 Liquibase,是针对带有JDBC的关系数据库。 这个项目存在是因为。

    • Cassandra不是关系数据库
    • Cassandra没有交易
    • Cassandra目前没有生产就绪的JDBC实现
    • 尝试实现与关系数据库函数( 如Cassandra的全局序列 id ) 是没有意义
    • 应该在迁移工具的外部管理cassandra的keyspace,以便系统管理员配置复制因子等。
    • CQL!= SQL
    • 工具应该适合 Cassandra,特别是从它的分布式架构的角度来看
    • 我已经使用Flyway了,我不想维护我自己的Flyway版本

    要求

    • Java ( 用 JDK 7 + 测试)
    • Apache Cassandra ( 用 2.1.5 + 测试)
    • 预填充的keyspace
    • Cassandra迁移库
    
    <dependency>
    
    
     <groupId>com.contrastsecurity</groupId>
    
    
     <artifactId>cassandra-migration</artifactId>
    
    
     <version>0.6</version>
    
    
    </dependency>
    
    
    
    

    迁移版本表

    
    cassandra@cqlsh:cassandra_migration_test> select * from cassandra_migration_version;
    
    
     type | version | checksum | description | execution_time | installed_by | installed_on | installed_rank | script | success | version_rank
    
    
    -------------+---------+-------------+----------------+----------------+--------------+--------------------------+----------------+----------------------------------------+---------+--------------
    
    
     CQL | 1.0.0 | 985950023 | First | 88 | cassandra | 2015-09-12 15:10:22-0400 | 1 | V1_0_0__First.cql | True | 1
    
    
     CQL | 1.1.2 | 2095193138 | Late arrival2 | 3 | cassandra | 2015-09-12 15:10:23-0400 | 5 | V1_1_2__Late_arrival2.cql | True | 2
    
    
     CQL | 1.1.3 | -1648933960 | Late arrival3 | 15 | cassandra | 2015-09-12 15:10:23-0400 | 6 | V1_1_3__Late_arrival3.cql | True | 3
    
    
     CQL | 2.0.0 | 1899485431 | Second | 154 | cassandra | 2015-09-12 15:10:22-0400 | 2 | V2_0_0__Second.cql | True | 4
    
    
     JAVA_DRIVER | 3.0 | null | Third | 3 | cassandra | 2015-09-12 15:10:22-0400 | 3 | migration.integ.V3_0__Third | True | 5
    
    
     JAVA_DRIVER | 3.0.1 | null | Three zero one | 2 | cassandra | 2015-09-12 15:10:22-0400 | 4 | migration.integ.V3_0_1__Three_zero_one | True | 6
    
    
    
    

    支持的迁移脚本类型

    . cql-文件

    例如:

    
    CREATE TABLE test1 (
    
    
     space text,
    
    
     key text,
    
    
     value text,
    
    
     PRIMARY KEY (space, key)
    
    
    ) with CLUSTERING ORDER BY (key ASC);
    
    
    
    INSERT INTO test1 (space, key, value) VALUES ('foo', 'blah', 'meh');
    
    
    
    UPDATE test1 SET value = 'profit!' WHERE space = 'foo' AND key = 'blah';
    
    
    
    

    Java类

    例如:

    
    public class V3_0__Third implements JavaMigration {
    
    
    
     @Override
    
    
     public void migrate(Session session) throws Exception {
    
    
     Insert insert = QueryBuilder.insertInto("test1");
    
    
     insert.value("space","web");
    
    
     insert.value("key","google");
    
    
     insert.value("value","google.com");
    
    
    
     session.execute(insert);
    
    
     }
    
    
    }
    
    
    
    

    命令行接口

    Java API

    例如:

    
    String[] scriptsLocations = {"migration/cassandra"};
    
    
    
    Keyspace keyspace = new Keyspace();
    
    
    keyspace.setName(CASSANDRA__KEYSPACE);
    
    
    keyspace.getCluster().setContactpoints(CASSANDRA_CONTACT_POINT);
    
    
    keyspace.getCluster().setPort(CASSANDRA_PORT);
    
    
    keyspace.getCluster().setUsername(CASSANDRA_USERNAME);
    
    
    keyspace.getCluster().setPassword(CASSANDRA_PASSWORD);
    
    
    
    CassandraMigration cm = new CassandraMigration();
    
    
    cm.getConfigs().setScriptsLocations(scriptsLocations);
    
    
    cm.setKeyspace(keyspace);
    
    
    cm.migrate();
    
    
    
    

    命令行

    
    java -jar 
    
    
    -Dcassandra.migration.scripts.locations=file:target/test-classes/migration/integ 
    
    
    -Dcassandra.migration.cluster.contactpoints=localhost 
    
    
    -Dcassandra.migration.cluster.port=9147 
    
    
    -Dcassandra.migration.cluster.username=cassandra 
    
    
    -Dcassandra.migration.cluster.password=cassandra 
    
    
    -Dcassandra.migration.keyspace.name=cassandra_migration_test 
    
    
    target/*-jar-with-dependencies.jar migrate
    
    
    
    

    可以通过传递以下参数来设置日志记录级别:

    • 信息:这是默认值
    • 调试:-x'
    • 警告:-q"'

    虚拟机选项

    可以通过API或者通过虚拟机选项设置选项。

    迁移

    • cassandra.migration.scripts.locations: CSV格式迁移脚本的位置。 在指定的文件夹中递归扫描脚本。 ( default=db/迁移)
    • cassandra.migration.scripts.encoding: CQL脚本的编码( default=UTF-8 )
    • cassandra.migration.scripts.allowoutoforder: 允许脱离顺序迁移( default=false )
    • cassandra.migration.version.target: 目标版本将忽略具有更高版本号的迁移。 ( default=latest )

    群集

    • cassandra.migration.cluster.contactpoints: node IP地址的逗号分隔值( default=localhost )
    • cassandra.migration.cluster.port: CQL本地传输端口( default=9042 )
    • cassandra.migration.cluster.username: 密码验证器的用户名( 可选)
    • cassandra.migration.cluster.password: 密码验证器的密码( 可选)

    Keyspace

    • cassandra.migration.keyspace.name: Cassandra keyspace的NAME ( 必需)

    群集协调

    • 架构版本跟踪语句使用 ConsistencyLevel.ALL
    • 用户应该在迁移脚本中管理他们自己的一致性级别

    限制

    • 尚不支持基线
    • 迁移失败时该工具不会回滚数据库。 你应手动还原备份。


    文章标签:数据  tool  Apache  CAS  Cassandra  evo  apache-cassandra  数据库迁移  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语