第1回:Hibernate Searchって何だ? (2/3)

Hibernate Searchで全文検索システム構築
Hibernate Searchで全文検索システム構築

第1回:Hibernate Searchって何だ?

著者:ロンウイット  関口 宏司   2007/11/12
前のページ  1  2  3  次のページ
メリット2「LuceneのAPIの隠蔽」

   Hibernate Searchの第2のメリットは、Lucene APIの隠蔽である。「JBoss EAP+Luceneによる全文検索システム」を読んだ方は、Luceneの検索インデックスへのアクセスが、RDBへのアクセスと似ていることに気がつくだろう。たとえば、Luceneの「DocumentとField」は、それぞれRDBの「レコードとカラム」に相当している。

   また、Luceneの検索結果であるHitsオブジェクトはRDBの結果セット(ResultSet)のオブジェクトに似ているといえる。このことは、「JBoss HibernateのプログラマがLuceneのオブジェクトとビジネスオブジェクトを自分でマッピングしなければならない」という問題を抱え込むことになってしまう。

   そのような場合にHibernate Searchを利用するとLuceneのAPIが隠蔽され、検索インデックスへの書き込みや検索結果の取り出しが、すべてビジネスオブジェクトへのアクセスで置き換えられる。これがHibernate Searchのメリットの2番目となる。
LuceneのAPIの隠蔽
図2:LuceneのAPIの隠蔽

   次に、Hibernate Searchのその他の特徴的な機能を紹介する。


Hibernate Searchのその他の機能「更新トランザクション」

   前述の通り、RDBを更新するとHibernate SearchによりLuceneインデックスの更新が自動的に行われる。このとき、更新をトランザクション内で実行すると、Luceneインデックスへの更新の反映はコミット時にまとめて行われる。一方、トランザクションではなく自動コミット(auto-commit)を使用する場合は、Luceneインデックスへの更新の反映はRDBの操作直後に実行される。

   一般的にパフォーマンスの観点から、特別な事情がない限りはトランザクションを使用して更新するのが推奨されている。

   なお、Luceneインデックスへの更新を更新専用の別スレッドに委譲する「非同期」更新とコミットを実行するスレッド内で更新する「同期」更新を選択することができる。

   「非同期」の場合は、RDB更新処理とLuceneインデックス更新処理が別々のスレッドになるため、トランザクションのスループットとレスポンス性能が向上する。しかし、RDBの更新内容がLuceneインデックスに反映されるのに遅れが生じる。

   「同期」の場合は「非同期」のときのメリットとデメリットが逆になる。つまり、RDBとLuceneインデックスの更新はリアルタイムに行われるが、更新リクエストが多い場合にトランザクションのスループットとレスポンス性能が低下する。

   Hibernate Searchでは、「同期」を試してみて性能上問題が見られる場合は「非同期」に移行するように推奨している。

   次にHibernate Searchのクラスタのサポートを紹介する。

前のページ  1  2  3  次のページ


株式会社ロンウイット 関口 宏司
著者プロフィール
株式会社ロンウイット  関口 宏司
代表取締役社長
数社のITベンダー勤務を経て、2006年5月にロンウイット社を設立。オープンソースの全文検索エンジンLuceneとSolrを企業システムに導入する支援事業を展開している。「Apache Lucene入門」(技術評論社)はじめ著書多数。

ロンウイット:http://www.rondhuit.com/
ブログ:http://lucene.jugem.jp/


INDEX
第1回:Hibernate Searchって何だ?
  Hibernate Searchとは?
メリット2「LuceneのAPIの隠蔽」
  クラスタのサポート
Hibernate Searchで全文検索システム構築
第1回 Hibernate Searchって何だ?
第2回 全文検索機能を試すサンプルを作成しよう!
関連記事
JBoss EAP+Luceneによる全文検索システム
JBoss Enterprise Application Platformの全貌
EJB 3を再考する

人気記事トップ10

人気記事ランキングをもっと見る