質問: ### 前提・実現したいこと 1億行のCSVファイルを扱うために、MySQLを用いてデータベースで処理しようとしています。 1億行という大規模なファイルであるために、そのまま読み込もうとしても非常に時間がかかってしまい、良い方法を見つけるのに苦労しています。 ### 発生している問題・エラーメッセージ 読み込みスピードが遅く、現実的な時間では終わらない。 ### 試したこと 1億行のCSVファイル(hogehoge.csvとする)を、読み込んでテーブルに入れようとしています。 はじめは、テーブルを作成した後に以下のコードを試みました。 ``` LOAD DATA LOCAL INFILE "hogehoge.csv" INTO TABLE table FIELDS TERMINATED BY X'09' ``` しかし、丸一日経過すれど処理が進まなかったため、1億行のファイルを、10000行×10000ファイルに分割して順番に読み込むことを試みました。 hogehoge.csvを、splitを用いてシェル上で分解し、table.00000.csv ~ table.09999.csvという10000個のファイルに分割した後、以下のコードを実行しました。 ``` mysqlimport -L -u root -p database table.* ``` しかし、これでも1つのcsvを読み込むのに45秒程かかっているため、仮にそのペースが最後まで続いても125時間はかかってしまいます。 このような巨大なCSVを高速に読み込む良い方法はないでしょうか。 LOAD DATA INFILEではなく、INSERTやMultiple INSERTと呼ばれる手法もあるようですが、1億行を処理するにあたってどちらが優れているのか判断しかねています。 Multiple INSERTを用いる場合は、MySQLとは別に、複数のレコードを同時に挿入するべく、SQLのスクリプトを作成する作業が必要だと考えているのですが、その認識は正しいでしょうか。 ### 参考にしたサイトなど
回答: 具体的なデータがどのようなものかわかりませんが データ投入は整合性チェックなどを考えればそれなりに時間がかかるものです 適当な単位(例えば1億行のデータであれば100~200万行単位くらい?)で グルーピングができるならパーティショニングすれば 全体テーブルの整合性チェックから開放されるかもしれません。 いずれにしても1億行となるとRDBで普通にデータ管理するには負荷が かかりすぎて現実的ではないかもしれません。 ビッグデータに強いと言われるNoSQLなど別の方