インターン3日目

今日から金曜、もしかしたら月曜まで
俺のインターン担当のW氏が居なくなってしまった。
もう一人の人もお休み中。
というわけで一人で仕事してます。
といっても技術的な質問は
そのほかの人に出来るんですけどね。
あまり仕事内容は話せないので
今日は自分が得た知識を。
ちなみにネットで調べて乗ってるようなことなので
ここに書いても問題は無いです。
自分は今DBを扱ってるんですが、
今まで経験があるとはいえ適当なプログラムに
適当に使っただけなので、
レコードは精々100くらい。
しかし今回のインターンでは
実践に近い環境を用意するので
テストデータのレコード数1000万件。初めて見た時はビビったね!
こりゃあ多すぎだろうと!
実際どうなのか知りませんけど・・・。
で、今日はDDL(CREATE文)を作りながら
テストデータをどうやって用意しようか検討。
初めはJavaとかでプログラムして
ひたすらINSERTすればいいやとか
そんな考えで居たら、昨日W氏が・・・
「テストデータ1000万だよ?時間足りる?」
ハッ・・・!
こいつはやべえ・・・絶対無理。
というわけでW氏が提案してくれた手法1、
ストアドプロシージャを使うことに。
ストアドは簡単に言うとDB内からSQL実行するもの。
つまりいちいちコネクションしなくていいから
その分早くなるでしょ?とのこと。流石DBのプロです。
という訳で苦労してストアド調べて書いて実行!
1000万件INSERTに100時間かかるよ!
こいつはやべえ、やばすぎる。
W氏の方法2
「バルクロードがめちゃ早い」
初耳でした。
調べるとLOAD DATA文で
タブや改行で区切ったtxtを読み込ませるもので
めっさ高速にINSERTできるらしい。
というか多分内部でINSERTは使ってなくて
単純なコピーをやってるから早いんだろう、多分。
本日家に帰ってきてから実験。
本番とテーブル定義こそ違うものの、
1000万件が3分で入っちゃったよ!
txtは130MBです。
なんというファイルコピー・・・・。
いやあバルクロード凄いですね。
そしてW氏ありがとう!
これでDBスペシャリストにまた一歩近づいたぜ。
明日は合同フォーラムとインターンです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です