民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS H2 Database Engine のクセがよく分からない

<<   作成日時 : 2009/08/11 00:03   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

昨日のテストがうまく行ったので、今日は本番。
ざっと、15万件ほどの名簿データを、H2 に読み込ませてみた。
groovy でごにょごにょとスクリプトを書いて
sql.execute("INSERT INTO hoge SELECT * FROM CSVREAD('hoge.csv');")
というような SQL を使った。

すると、5分ほどしてから、OutOfMemoryError が出て落ちてしまう。
じゃあ、heap サイズを調整して。
ということで、環境変数 JAVA_ARGS で、JVM が 256M までメモリを使えるようにして再度実行。
しかしやはり、5分ほどで、OutOfMemoryError が出てしまう。

ならば、5万件×3回でデータを取り込めばいいだろうということで、元データの CSV ファイルを3分割。
それで再々度チャレンジしてみたところ、やはり5分ほどで OutOfMemoryError。

このあたりで、「やっぱり MySQL を使ったほうが慣れている分、楽かな?」と思い始めたのだが、とりあえずもう一頑張りということで、スクリプトを書き換え、
System.in.eachLine() { line->
sql.execute("INSERT INTO hoge VALUES (" + line + ")");
}

というような、若干手抜きのような方法で、全件 INSERT を試みることにした。

すると、20分くらいかかったものの、全件取り込みに成功。
まずは一安心。

続いてこんどはインデックスの作成。
sql.execute("CREATE INDEX index_name ON hoge (name)");
とやったところ、15万件のインデックスを作成するのに1時間近くがかかってしまった。

MySQL に比べて、あまりに遅すぎる。
何かを間違えているのだろうと思う。
しかし、今日のところは、何を間違えているのか、さっぱり分からなかった。

とりあえずデータを取り込んで、インデックスを作ってしまうと、あとの検索処理については、満足のいくパフォーマンスを得ることができている。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
H2 Database Engine のクセがよく分からない 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる