宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
今の所、XUL/Migemoの辞書ファイルは全部普通のテキストファイルなんだけど、これをSQLiteデータベースに置き換えてみようかなと思ってる。メリットがあるのかどうかは分からないんだが。
現在の辞書周りは基本的にはplus7さんが作られた物を踏襲していて、起動時に全ての内容を読み込み、JavaScriptの普通の文字列としてオンメモリで保持しておくようになってる。でもこれだとFennecで動かすのって多分きついだろうなあ、とは思ってた。
どうなんだろう、SQLiteって関係ないデータはメモリに読み込まずにいてくれたりするんだろうか? Fennecのデフォルト設定を見た限りでは、履歴の保持日数はFirefoxと同じ90~180日となってるから、これを全部メモリ上に読み込んだらエラい事になるよねぇ。と考えると、必要最小限だけメモリに読み込むようになってる事を期待してると考えていいんだろうか? それとも、これは単にFennec開発陣がSQLiteを過信あるいはモバイルプラットフォームを甘く見てただけで、実は全部オンメモリになっちゃいますとか?
まあとりあえず実装するだけしてみて、それから考えてみよう……
……とりあえずやってみたけど、なんか、めさめさ重い……ちゃんと作ってないから単にどっかで無限ループしてるのかもだけど。しかしそれを抜きにしても、辞書が約4MBだったのがSQLiteにしたら9MBに膨れ上がってしまった。モバイルで使うなんてのはますます非現実的な領域だ。工夫しないと全然お話にならんね……
追記。もうちょっと進めてみたけど、余計泥沼に嵌ってる気がしてきた。バックエンドのSQLite化は無しだな、というのが現時点での結論ですわ。
Bugzilla@Mozillaで探してみましたが、Fennecでの扱いはよくわかりません。
「必要最小限だけメモリに読み込む」みたいな高度なことをしていれば、検索に引っかかるはずなんですけどね。
ちなみに、
Bug 481986 - Loading bookmarks into the bookmark list is slow
というのがあります。現在ではRESOLVED FIXEDですが、バグが報告された2009-03-06の時点では、「Loading 50 bookmarks is taking around 20 seconds (on n810)」だったとか。
技術的なことは分かりませんが、実機のFennecでSQLiteを使うと、パフォーマンスの問題で苦労するのかな、と思いました。
コードを誤読してるかもですが、transaction 使われてますか?
データ数が少ない内は使わなくても済みますけど、データ数が20とか30とかの時点でも、ちょっと凝ったことをやろうとすると transaction かまさないと使い物になりません。>SQLite
http://ichiro.maruta.googlepages.com/storage%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
だと、executeSimpleSQL で "BEGIN TRANSACTION" と "END TRANSACTION" してますけど、
dbConnection.beginTransaction();
... // statement 実行
dbConnection.commitTransaction();
で良さそうです。
情報ありがとうございます。
トランザクションを使う方法で最初の辞書のインポートは解決できたんですが、辞書からのエントリの検索を効率よく行う方法を確立できてないというのが現状ですね……
> SQLiteって関係ないデータはメモリに読み込まずにいてくれたりするんだろうか?
SQLite の場合、データベースファイル中の、読む必要のあるページしか読まないので、いきなり全部オンメモリになったりはしません。
一度読んだところはメモリ上にキャッシュされますが、SQLite がキャッシュするサイズは PRAGMA cache_size で設定できます。あらかじめ設定されている値が良くないと思ったら変更すれば良いでしょう。
http://www.sqlite.org/pragma.html#pragma_cache_size
あと、OS もファイルの中身をメモリ上にキャッシュしますが、他にメモリが必要であれば自動的にキャッシュは捨ててくれるので、あまり気にしなくて良いでしょう。
の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2009-04-21_sqlite.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。
writeback message: Ready to post a comment.