(四)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
),有CSV
和TSV
两种类型可供选择,并且需要在填写有关Import
的配置项的时候需要指明,然后在创建表时会根据kafka
中存储的JSON字符串的K-V
对数(就是一段JSON
串中存在的键值对的对数)来决定。另外导入时需要指明kafka
的groupid
,否则可能会出现导入失败。
<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
等等存储目的地,首先在导出时需要创建 STREAM
,STREAM
的作用就是可以将数据不断地以副本的形式导出的各种存储源,它的创建过程以及形式与表一样,但是可以将它看作一种虚拟的表,但是它不支持除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_customer
的STREAM
:
CREATE STREAM export_customer EXPORT TO
TARGET archive ( . . . );
然后需要在配置文件(deployment.xml
)文件中配置有关 Export
的属性,比如以下示例是将数据导出格式为 CSV
的 file
。
<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
数据的导入导出先介绍为止。以上内容均来自个人实践总结以及参考官方文档。
三、参考文档
- https://docs.voltdb.com/UsingVoltDB/exportimport.php