본문 바로가기

Data

embulk 이용한 oracle -> mariaDB 데이터 벌크 이행

oracle DB 테이블 데이터를 mariaDB 로 이행할 일 있어서 python/pandas 로 간단히 만들었는데 multi insert 하게끔 해도 600만건 처리하는데 30분을 족히 넘어간다.

개선할 방법이야 여럿 있겠지만 거 붙잡고 있을 시간 없어서 주위 엔지니어분들께 수소문해보니 oracle -> BigQuery 이행 작업 위해 embulk 쓰는 중인데 성능 괜찮다길래 후다닥 사용해봤다.

 

Embulk

Pluggable, Multi-source/destination, Open-sourced Bulk Data Loader to/from databases, storages, file formats, cloud services, ...

www.embulk.org

설치해보니 덜렁 파일 하나. 게다가 사용법도 2,30분 이내면 간단히 이해할 수 있을 정도로 쉽다. 

간단하게 설정 및 사용법 정리.

  1. 파워쉘 창 오픈 후 다음 명령어로 embulk 설치

D:> mkdir embulk

D:> cd embulk

D:> PowerShell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::TLS12; Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"

주. java/jruby 로 만든 프로그램이라서 jdk 1.8 필요.

  1. Command 창 열어서 oracle, mysql 플러그인 설치( 기타 플럭인 목록은 plugins.embulk.org/ 참고 )

D:> cd embulk

D:> embulk gem install embulk-input-oracle

D:> embulk gem install embulk-output-mysql

  1. 설정 파일 생성.

config_test.yml

exec:
    max_threads: 20
    min_output_task: 10
in:
    type: oracle
    driver_path: D:/.../ojdbc8.jar
    host: oracle_host
    user: ***
    password: ***
    database: sid or service_name
    query: |
        Select * from ... WHERE ...
out: 
    type: mysql
    host: mariadb_host
    port: 3306
    user: ***
    password: ***
    database: ****
    table: 저장 테이블명
    mode: replace

4. 실행 : embulk run config_test.yml

600만건 처리하는데 1분 40초 가량으로 획기적으로 줄었다. 5천만건에는 15분 정도.

당연히 데이터 크기에 따라 성능 달라지겠지만 당장은 이 정도면 사용에 무난.