(四)VoltDB 数据导入导出

Posted on 2017-01-30(星期一) 18:00 in VoltDB

一、Import 数据

针对导入数据到 VoltDB 当中,VoltDB 为不同的使用场景提供了不同的解决方案,有可能只需要在第一次初始化数据到数据库中时导入,但也有可能数据实时更新同时就需要数据实时导入到 VoltDB 当中。

1.1 使用工具一次性导入

在一次性导入的场景当中,比如一次性将数据初始化到 VoltDB 当中,VoltDB 提供了批量导入工具 csvloader 以及 jdbcloader

使用 csvloader 工具导入数据到数据库即从 csv 文件导入数据到 VoltDB 。在启动 VoltDB 后,打开另外的 shell 窗口进入相同的目录,使用以下命令:

$csvloader city --file=data.csv

解释一下上面的命令,city 是已经在 VoltDB 中创建的表结构,data.csv 是数据批量存在的文件,需要使用 --file 来指定文件。命令格式即如下:

$csvloader [table-name] --file=[filename]

其他命令选项可以在官网查询。

使用 jdbcloader 导入数据:

$ jdbcloader employees \
     --jdbcurl=jdbc:postgresql://remotesvr/corphr \ 
     --jdbctable=employees \ 
     --jdbcdriver=org.postgresql.Driver

上述命令即使用 jdbc 工具批量导入数据到 VoltDB

1.2 实时导入数据

要导入的数据是不断更新的业务数据,也就是导入的数据源数据实时更新,需要在配置文件中配置import相关配置。在导入时需要使用VoltDB中已有的存储过程,但是不同的一点是,它是可以自动的控制数据导入。比如使用kafkaloader将数据从kafka中导入数据。 在使用kafkaloader时(type="kafka"),需要选择数据导入之前的初始化类型(format),有CSVTSV两种类型可供选择,并且需要在填写有关Import的配置项的时候需要指明,然后在创建表时会根据kafka中存储的JSON字符串的K-V对数(就是一段JSON串中存在的键值对的对数)来决定。另外导入时需要指明kafkagroupid,否则可能会出现导入失败。

<import>
  <configuration type="kafka" format="csv" enabled="true">
    <property name="brokers">192.168.0.135:9092</property>
    <property name="topics">indigo_idg</property>
    <property name="procedure">EDI.insert</property>
    <property name="groupid">1</property>
  </configuration>
</import>

也可以配置多个kafka数据源将数据导入VoltDB当中。如下示例:

<import> 
<configuration type="kafka" enabled="true"> 
  <property name="brokers">kafkasvr:9092</property> 
  <property name="topics">employees</property> 
  <propertyname="procedure">EMPLOYEE.insert</property> 
</configuration> 
<configuration type="kafka" enabled="true"> 
  <property name="brokers">kafkasvr:9092</property> 
  <property name="topics">managers</property> 
  <property name="procedure">MANAGER.insert</property> 
</configuration> 
</import>

以上从kafka导入数据只是数据源的一种,其他数据源可以查看官方文档。

二、Export 数据

Export 功能现在也暂时只支持企业版。如何做到将voltDB中的数据导出到其他目的地,比如 file,kafka,elasticsearch 等等存储目的地,首先在导出时需要创建 STREAMSTREAM 的作用就是可以将数据不断地以副本的形式导出的各种存储源,它的创建过程以及形式与表一样,但是可以将它看作一种虚拟的表,但是它不支持除Insert以外的其他操作的,指出的是在Export之前必须创建 STREAM

创建 STREAM 写法:

CREATE STREAM stream-name 
[PARTITION ON COLUMN column-name]
[EXPORT TO TARGET export-target-name] ( 
column-definition [,...]
);
column-definition: column-name datatype

[DEFAULT value ] [ NOT NULL ]

示例:

创建名为 export_customerSTREAM

CREATE STREAM export_customer EXPORT TO 
TARGET archive ( . . . );

然后需要在配置文件(deployment.xml)文件中配置有关 Export 的属性,比如以下示例是将数据导出格式为 CSVfile

    <export>
     <configuration enabled="true" target="votes" type="file">
       <property name="type">csv</property>
       <property name="nonce">MyExport</property>
      </configuration>
</export>

经过上述步骤以后,导出 VoltDB 中的数据需要在 VoltDB 初始化时,或者在使用命令 voltdbadmin update 的时候。

关于 VoltDB 数据的导入导出先介绍为止。以上内容均来自个人实践总结以及参考官方文档。

三、参考文档

  1. https://docs.voltdb.com/UsingVoltDB/exportimport.php