2012-01-08 9 views
2

私は、膨大な量のデータを保管するセマンティック検索システムに取り組んでいます。データは実際には文書とその索引です。主な問題は、オントロジーを使用して文書を索引付けする方法と、オントロジーを保管する方法です。文書索引を効率的に保管する方法

私の質問は2番目の問題です。最初は、RDBMSに格納を実装しました。それはゆっくりと動く。私は、この目的のためにいくつかのNoSQLデータベースを使用すると考えますが、いくつかの疑問があります。

Luceneを使用した単純なテキスト検索は、現在のフィールドに必要なものではありません。

店舗構造を簡略化しましょう。逆インデックスのみが格納されていることに注意してください。 RDBMSでは、私たちはテーブルがあります。
1)ワード - いくつかの辞書から単語を
2)文書 - メタデータと文書とそれがコンテンツだ
3)ヒット - ドキュメント内の単語のヒット(区切らすべてのヒット「|」)

結果システムは、要求に応じて単語を分析し、単語のヒット情報に基づいてドキュメントの関連性を計算します。私はセマンティック分析についていくつかの瞬間を省略しましたが、今は重要ではありません。

保存という単語のこの構造についてどう思いますか?

{
"言葉": "some_word"、
...

...
"ヒット" "辞書からいくつかの他のメタデータ":[
"DOC1":[ " hit_info1" 、 "hit_info2" ...]
"DOC2":[ "hit_info1"、 "hit_info2" ...]
]
}事前に

ありがとう!

+0

ファイルシステムに保存することを検討しましたか?ファイルシステムは、実際には非常に最適化されたNoSQLシステムです。 –

+0

多くの挿入、更新、保存の選択が行われていますが、ファイルシステムは最適な解決策ではないと思います。 – Bohdan

+0

データとそのデータの問い合わせ方法に関する追加情報をご提供ください。これをRDBMSにどのように実装しましたか? –

答えて

1

まず、RDBMSは高度に構造化されたデータに適しています。 RDBMSの主なパフォーマンス上の問題は、トランザクション処理です。単語と文書の間のn:m関係を管理しようとします。これはファイルシステムでは実行できません。 SQLサーバーを使用して、次のヒントに従うと、十分速くなければなりません。

まず、一般化されたバッチ処理をサポートするORM(オブジェクトリレーショナルマッピング)フレームワークを検討する必要があります。 C#と.NETでは "DataObjects.NET"をお勧めします。クライアント/サーバーのラウンドトリップを最適化する多くの作業を節約できます。

できるだけ大きな取引を行います。 1000語の文書がある場合は、1つのトランザクションで処理します。たぶん、1つのトランザクションで複数の文書を処理することができます。

二つのバッチであなたの挿入フォーム: (バッチは、SQLコマンドのブランチであるサーバーに1安らかに送る)

  1. クエリドキュメント
  2. のためのすべての行方不明の単語が文書を挿入し、不足している言葉、そして1ラウンドでの関係。

これをバッチで行うことは絶対に重要です。シングルステートメントを実行すると、クライアント/サーバーラウンドトリップで混乱することになります。

私は同様のデータを処理しており、大きなバッチ(100000ワード)の場合、これは約0.2〜0.5秒で実行されます。

P.S. SQLサーバーのトランザクション終了時にディスクへのフラッシュを無効にすることを検討してください。

+0

あなたの説明をありがとう!私はすでにバッチインサートと大きなトランザクションを実装しています。はい、約1秒で100kの挿入が行われますが、ドキュメント内のすべての単語のヒットに新しい行を挿入するのは効率的ではないようです。 – Bohdan

+0

それは非常に簡単です:あなたがそれを必要とする場合は、それを持っている必要があります。すべての単語が必要ない場合は、遅延索引付けを検討してください。あなたが照会する単語のみを索引付けします。これは膨大な量の文書に欠点があることは明らかです。 –

+0

もう1つのアイデア:ハッシュ関数を使って単語をいくつかの小さなインデックスに折り畳むことを考えましたか?単純なハッシュを計算し、それを16ビット以下にフォールドします。だからあなたのインデックスルームはあなたが望むほど小さいです。クエリの結果セットが大きすぎますが、これは簡単に確認できます。おそらく、データのインデックス作成とクエリの間でより良い妥協点を得るでしょう。 –

関連する問題