MySQL化に引き続き,検索の高速化を行ってみました。手っ取り早く,著者フィールドをindex化した結果,かなりの高速化ができることを確認しました。
検索ワードを「高橋留美子」でやってみた結果です。index化前は
でしたが,index化後は
となり,1.69秒→0.00257秒で爆速となりました。このぐらいだとほぼWeb通信の遅延しか感じません。
とはいえ,index化できるフィールドには限りがあり,出版社名,タイトル名まで一篇にはindex化できません。ということで,メインの書籍テーブルではタイトル名でindex化しておき,著者名,出版社名はそれぞれ個別にテーブルを作っておくことにしてはどうかと思案中です。これができると,ようやく最終目的である「openBD APIに著者名,タイトル名,出版社名の検索機能を追加する」ことができるようになります。予定では
- 著者名検索 -> http://root-url/tklab_openbd/version/search?author=著者名
- 出版社名検索 -> http://root-url/tklab_openbd/version/search?publisher=出版社
- タイトル名検索 -> http://root-url/tklab_openbd/version/search?title=タイトル
となればいいかなぁ。マシンリソースが決定的に不足してますんで,API keyはPOSTで渡すようにして制限掛ける予定です。今月中にできればまぁ情報処理学会で話すぐらいは出来るでしょう。
ちなみに,メイン書籍テーブルまるごとのMEMORYエンジン化は無理でした。メインメモリを山ほど積んだ,openDBの本家が展開しているような贅沢クラウド環境でないと厳しいですねぇ。
フィールドを制限してテーブルサイズを小さくすると入ることは入りますが,1/4ぐらいの検索速度に留まりましたんで,index化の方が桁違いに速いことが分かります。