Hatena::ブログ(Diary)

プヨぷよの日記

2007/11/14 (Wed)

[][]辞書データコンバータの改善

SQLite の INSERT は遅いのか? - 元祖 サトシのブログ

たまたまここを見たがどうやら

SQLiteでは明示的にトランザクションを開始しない限り、INSERT処理の前後に必ず"BEGIN"、"COMMIT"が実行される

http://journal.mycom.co.jp/special/2004/php5/007.html

のために大量のINSERTを行うと非常に効率が悪いらしい。というわけで万単位のINSERTを実行する辞書データコンバータ

db.Query("BEGIN TRANSACTION;");
  (略)
db.Query("END TRANSACTION;");

の2文を追加したところ所要時間を45分から15秒*1へと短縮できた。なんか変だとは思ってたけど知らないって怖いね。というか恥ずかしくて泣きそうだよ。

一度やればいい処理なので多分ほとんどの利用者にとっては意味が無いと思われるが、ラボを更新しておいた。まだ遅いっちゃ遅いし環境にも因ると思うけど格段に早くなるのは間違いない。一般公開考えてもいいレベルかもしれない。

*1:どちらも時計で見ただけだけ

sidussidus 2007/11/14 23:28 45分から15秒ってすごいですね!
実は未だに導入方法がよくわかってないので導入してないのですが、
今度もう一度がんばってみます。

griffin-stewiegriffin-stewie 2007/11/15 14:18 45分から15分になっただけでもすごいのに単位まで違ってくるくらい速くなってる。180倍!すごすぎる。

Puyo2Puyo2 2007/11/16 00:22 >sidus さん
手順多いんで普通のスクリプトに比べると導入難度は高いですが、
スクリプト書かない方が一番つまりそうなとこはコンバータ側で
GENE95 Dictionaryへのパスを指定するとこです。
そこが大丈夫だと見当つかないですが。。

>stewieさん
裏を返すと99%以上が無駄な処理に費やされてたってことですけどねw
(無駄を削って高速化すること自体は普通でしょうけど)

sidussidus 2007/11/16 11:05 今日やってみたらあっさりできました。
うーん、前回の自分は何を迷っていたのだろう。すみません。
これから使用させていただきます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Puyo2/20071114/p1