因为项目需要,需要导入大量的不同表的 csv文件的数据。目前采用 cmd方式调用OBloader进程的方式导入csv数据。
因为程序需要频繁启动OBloader进程,在启动的过程中需要消耗大量的时间。引发导入性能不能满足生产需要,想咨询下,如何快速启动OBloader进程,或者启动OBloader进程之后,可以让OBloader进程常驻,不需要再次启动减少启动耗时呢?
因为项目需要,需要导入大量的不同表的 csv文件的数据。目前采用 cmd方式调用OBloader进程的方式导入csv数据。
因为程序需要频繁启动OBloader进程,在启动的过程中需要消耗大量的时间。引发导入性能不能满足生产需要,想咨询下,如何快速启动OBloader进程,或者启动OBloader进程之后,可以让OBloader进程常驻,不需要再次启动减少启动耗时呢?
目前我们客户端内存24G的客户端系统,JVM内存配置了12G。
测试的启动速度需要耗时1.5秒。
想了解下如何调优呢?
调优部分的内容详见:
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000000518415
还可以在命令行文档里看下旁路导入部分和性能选项部分:OceanBase分布式数据库-海量数据 笔笔算数
你是想用obloader 一次性导入非常多的文件?
你是同一张表, 不同文件, 还是不同的表, 不同的文件
我们暂时还没有让 OBloader 进程常驻的这个操作,启动 jvm 本身就耗时,语言特性决定的。
老师您好。目前这个是大文件的调优,我们大文件目前测试可以达到10多mb一秒。这个是可以满足需要了。。但是就是小文件,每次启动OBLoader需要大量时间。请问,如果加快这个启动速度呢?或者能否让OBLoader这个进程常驻呢?
哦哦,懂你意思了。刚才问了下 obloader 的研发同学,他说:“如果命名方式能被 obloader 识别的话,即,表名 + 后缀。就可以多表导入,只用启动一次。”
大概意思应该就是可以通过加逗号的方式一次导入一批小表,之前没用过这种方式,我也一起试用一下~
老师,是不同表,不同文件,ctl文件也是不同的。所以目前我们是用多次启动OBLoader导入。但是每次启动OBLoader进程确实是比较慢 哦。 一次需要1.5秒启动。我这个机器。
你们后期有考虑用c++实现呢?嘿嘿。。c++启动就很快了。
哈哈,这个好像还没有
老师。这个有例子吗?我们也测试一下。多表导入的。
这个不能把进程挂着 你每次导的不一样obloader也是可能会变化的所以需要每次执行
兹拉坦老师,我们今天要研究一下这个批量导入的了,不然确实不能满足生产需要。您那边麻烦也试用一下。有相关的命令还有ctl文件怎么写,麻烦也回复一下。这块的案例你们这边很少。找不到相关的资料。
参见官网:OceanBase分布式数据库-海量数据 笔笔算数
我理解官网里的第一个命令 $./obloader -h xx.x.x.x -P 2883 -u test@mysql#cluster_a -p ****** -D USERA --csv --table '*' -f /output
中的 --table ‘’ 就是一次性导入目录下的所有表,把 --table '’ 改成 --table ‘table_name_1,table_name_2’ 就是一次性导入多张表。
嗯嗯。。我们刚刚测试了批量导入的。是可以。文件名和表名一样就可以了。速度好像还挺快。谢谢大家。
兹拉坦老师。不好意思。我又回来了。。今天业务系统说不能做批量的文件导入。需要按顺序执行一个文件一个文件的导入。所以批量导入的方案可能不能满足我们生产的需要。
因为单个单个启动OBLoader进行导入的话,启动时间比较长。文件数量多的话导入需要很长时间。导入一个小文件基本好事要在3s左右。100个文件按顺序导入的话要300秒太久了。
业务系统提出要用insert into读取数据后插入。我想问,OB有按块读取,按块导入的功能吗?需要怎么操作呢?我们的开发语言是C、C++。。