oracle DB 테이블 데이터를 mariaDB 로 이행할 일 있어서 python/pandas 로 간단히 만들었는데 multi insert 하게끔 해도 600만건 처리하는데 30분을 족히 넘어간다.
개선할 방법이야 여럿 있겠지만 거 붙잡고 있을 시간 없어서 주위 엔지니어분들께 수소문해보니 oracle -> BigQuery 이행 작업 위해 embulk 쓰는 중인데 성능 괜찮다길래 후다닥 사용해봤다.
설치해보니 덜렁 파일 하나. 게다가 사용법도 2,30분 이내면 간단히 이해할 수 있을 정도로 쉽다.
간단하게 설정 및 사용법 정리.
- 파워쉘 창 오픈 후 다음 명령어로 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 필요.
- Command 창 열어서 oracle, mysql 플러그인 설치( 기타 플럭인 목록은 plugins.embulk.org/ 참고 )
D:> cd embulk
D:> embulk gem install embulk-input-oracle
D:> embulk gem install embulk-output-mysql
- 설정 파일 생성.
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분 정도.
당연히 데이터 크기에 따라 성능 달라지겠지만 당장은 이 정도면 사용에 무난.
'Data' 카테고리의 다른 글
Uber 의 PostgreSQL -> MySQL 전환이라는 오래 된 기사 보고 (0) | 2021.06.23 |
---|---|
Oracle DB에서 주기적으로 데이터를 정확하게 5초 간격으로 추출 (0) | 2020.07.28 |
[MySQL]시간 올림, 내림 (0) | 2020.07.14 |
[DB]윈도우 함수 이용하여 직전 데이터 값 참조하기 (0) | 2020.07.10 |
[Python]pandas 의 to_sql 이용한 Bulk insert (0) | 2020.07.07 |