0

トルコ語で約 15 万の記事があります。自然言語処理の研究に記事を使用します。記事を処理した後、記事ごとに単語とその頻度を保存したい。

現在RDBSに保存しています。

私は3つのテーブルを持っています:

Articles -> article_id,text
Words -> word_id, type, word
Words-Article -> id, word_id, article_id, frequency (word_id のインデックス、 article_id のインデックス)

問い合わせます

  • 記事内のすべての単語
  • 記事ごとに 1 つの単語の頻度
  • すべての記事およびどの記事での単語の出現

words-article テーブルに何百万もの行があります。このプロジェクトでは常に RDBS を使用していました。mysql から始めて、現在は oracle を使用しています。しかし、私は oracle を使用したくなく、mysql よりも優れたパフォーマンスが必要です。

また、4 GB RAM を搭載したマシンでこのジョブを処理する必要があります。
簡単に言えば、文書と用語のマトリックスを保存し、それに対してクエリを実行する方法は? 性能が必要です。「キー値データベース」はパフォーマンスでmysqlを打ち負かすことができますか? または、mysql に勝るものは何ですか?

あなたの答えのプログラミング言語が依存している場合、私はpythonでコードを書いています。ただし、C/C++ 、Java は問題ありません。

4

2 に答える 2

0

lucene(またはphpのZend_Search_Lucene )をチェックしてください。とても素敵なFTSエンジンです。

于 2009-12-25T02:35:53.043 に答える
0

15 万件の記事の場合、words_articles テーブルに数億行が必要です。これは、MySQL を適切に構成している限り、管理可能です。

いくつかのヒント:

  • テーブルが InnoDB ではなく MyISAM であることを確認してください。
  • words_articles テーブルに id フィールドをドロップし、(word_id, article_id) を主キーにします。また、words_articles テーブルに word_id と article_id の個別のインデックスを作成します。

    ALTER TABLE words_articles
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (word_id, article_id),
    ADD INDEX (word_id),
    ADD INDEX (article_id);
    

    (単一の変更ステートメントですべてを実行すると、パフォーマンスが大幅に向上します)。

  • words テーブルに word のインデックスを作成します。

    ALTER TABLE words ADD INDEX (word);
    
  • my.cnf を微調整します。具体的には、バッファ サイズ (特に key_buffer_size) を増やします。my-huge.cnf は良い出発点かもしれません。

于 2009-12-25T03:12:30.333 に答える