mnesia の dump_to_textfile や load_textfile

mnesia に大量のデータを突っ込みたいとき色々考えていたのですが、結論としては dump した textfile を作成して一気に読み込ませればいいのかなぁと、調べてみました。

テーブルは1つで record(user, {user_name, password}) だけ。

mnesia:dump_to_textfile

> application:start(mnesia).
この辺にデータ入力処理
> mnesia:dump_to_textfile("/tmp/users.dump").
> application:stop(mnesia).

mnesia:load_textfile

> application:start(mnesia).
> mnesia:load_textfile("/tmp/users.dump").
> application:stop(mnesia).

dump したデータの内容はとてもシンプルでした

{tables,[{user,[{record_name,user},{attributes,[user_name,password]}]}]}.
{user,"user0001","pass"}.
{user,"user0002","pass"}.
{user,"user0003","pass"}.
{user,"user0004","pass"}.
{user,"user0005","pass"}.
{user,"user0006","pass"}.                                                       
{user,"user0007","pass"}.
{user,"user0008","pass"}.
{user,"user0009","pass"}.

5万件程度データを突っ込んでみたら、重くて終わらず。
timer:tc で 1万件データで 11 秒、2万件で 1 分 ... 一度に登録するデータは 1 万件が現実でしょうか。

ファイル読み込みなのでマルチプロセスは使えず、VM を通しての読み込みになるからか遅いです。これが 5 万件 10 秒以内で読み込む方法とかあるのかも ... 。

ちなみにコマンドラインは erl +K true +A 8 とかで読み込んでいます。

なにかいい方法あるのだろうか。

力武さんに言われてソースを見たら、io:format/3 とかしてる ... なんだなんだ。mnesia のソースリーディングが必要だなぁ。時間かかりそう:-P