7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Embulk】embulk-filter-evalとembulk-filter-ruby_proc速度比較

Last updated at Posted at 2017-11-30

概要

社内のシステムでDBから抽出したcsvファイルのデータ加工にEmbulkを導入し、その際にfitlerのプラグインではじめはembulk-fitler-evalというプラグインを使用していたが、データ量が多くなるにつれ、著しく処理時間が増えてしまった。。。。
プラグインの見直しを行いembulk-fitler-ruby_procというプラグインを見つけ、導入した結果大幅な速度改善をすることができたので、その速度比較の結果のメモを残す。
※今回は特に設定内容の詳細は記載致しません。

検証対象csvファイル

データサイズ 行数 列数 delimiter quote
78.5 MB 1249988 5 ,(カンマ) "(ダブルクォーテーション)
7.5 GB 3841276 307 ,(カンマ) "(ダブルクォーテーション)

データ量が少量のものと著しく多いもので処理速度の比較検証を行います。

加工内容

処理内容は至って簡単で下記です。

  1. カラム内に含まれる改行コードをエスケープする置換処理

速度比較

1. データ量が少量

embulk-filter-eval embulk-filter-ruby_proc
1分18秒 41秒

2. データ量が大量

embulk-filter-eval embulk-filter-ruby_proc
3時間30分39秒 49分20秒

検証結果

上記速度比較のように、プラグインをembulk-filter-evalからembulk-filter-ruby_procに変えただけで、

データ量が少量の場合は約47.7%減 (- 27秒)

データ量が大量の場合は約76.5%減 (-2時間41分19秒)

という結果となった。

データ量が少量の場合は、そもそもembulk-filter-evalでも1分程で終わっていて-27秒減で多少の改善程度に見えるが、データ量が大量のもので比較をするとその差は一目瞭然。
3時間半もかかっていた処理が1時間もかからず終わってしまった。

考察

そこまでゴリゴリ無理くりなデータ加工を行うわけではないのであれば、十分embulk-filter-ruby_procで事足りますし、何と言っても速度が速い....
あと、evalについては1年前にフロントエンドの開発をしてた時に、上司からセキュリティホールができやすかったりするので使わないほうが良いとご教授頂いたので、個人的にあんまりいい印象ではなかったので...
今回はembulk-filter-ruby_proc一択でした。

参考資料

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?