从Mysql到Cassandra的数据迁移

时间:2016-08-31 03:26:26

标签: mysql database datastax datastax-enterprise database-administration

我需要帮助以下情况。

我有一个MySQL表: -

CREATE TABLE employees (
    emp_no      INT             NOT NULL,  -- AUTO_INCREMENT??
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    user_id     INT             NOT NULL,   -- This is primary key of another table.   
    PRIMARY KEY (emp_no));

此表有大约20000条记录。

我将这个MySQL表转移到Cassandra表,如下所示。

CREATE TABLE employees (
    emp_no      uuid,
    birth_date  timestamp,
    first_name  text,
    user_id uuid,
    PRIMARY KEY (emp_no));

现在我想将MySQL表中的所有20000条记录导出到Cassandra表。

user_id列是另一个表中的主键,first_name列也是使用user_id列映射的。

请让我知道如何实现这一目标。

以下是我正在使用的datastax版本的详细信息。 [cqlsh 5.0.1 | Cassandra 2.1.15.1403 | DSE 4.8.9 | CQL规范3.2.1 |原生协议v3]

请建议我从MySQL到Cassandra的数据迁移的最佳方式。

2 个答案:

答案 0 :(得分:1)

上面的数据流方案非常适用于您的情况。另一种方法是创建一个小型java项目,为您完成。在您的情况下,从mysql表到cassandra表的模型是相同的。所以你可以做到以下几点:

  1. 使用hibernate和datastax驱动程序创建一个java项目
  2. 为员工创建一个java类
  3. 通过hibernate xml映射将员工映射到mysql(我更喜欢xml因为那时我可以使用相同的java模型来实现cassandra)
  4. 通过datastax驱动程序注释将employees类映射到cassandra表
  5. 使用hibernate会话分批引导您的员工
  6. 使用datastax驱动程序将批处理中的所有员工保存到cassandra。
  7. 您的员工类应如下所示

    @Table(keyspace = "your_keyspace", name ="employees")
    public class Employee
    {
        @PartitionKey(0)
        @Column(name = "emp_no")
        protected UUID employeeNo;
    
        @Column(name = "birth_date")
        protected Timestamp birthDate;
    
        @Column(name = "first_name")
        protected String firstName;
    
        @Column(name = "user_id")
        protected UUID userId;
    }
    

    当然Java不是你唯一的选择。 Datastax驱动程序可用于许多语言,如C#或python。

答案 1 :(得分:0)

参考:Migrate RDBMS to Cassandra

更多信息:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/copy_r.html

请将您的mysql数据转换为CSV并导入到cassandra表中。这项工作我已经检查了这个。