2009-06-24 8 views

答えて

0

この回答は1つしかありません。それは自分のデータセットで試してみるだけです。

個人的には、大きな違いがあると私は驚いています。私はこの種の性能がIO帯域幅によって制限されていると考えています。

+1

実際にはI/O帯域幅は実際には関係しません。データベース内のフルテキスト検索アクセラレーションの全ポイントは、それを見つけるためにすべてのデータをスキャンするだけではありません。 MySQLのフルテキスト検索は、多くの人が最小限の調整可能性を持つ標準的な設定で必要とする基本的な種類のものです。 PostgreSQLの実装ははるかに複雑で、クエリを高速化するためにあらゆる種類のトリックでデータを分割できます。クエリーを満たすために探しているものと、基礎となるデータのサイズは、十分な量の作業を入れれば、かなり切り離されることがあります。 –

3

mysqlに比べてPostgresに大きな利点があるとは思えませんが、テストすることができないのであれば。しかし、あなたの主な問題、全文検索は、SphinxまたはLuceneのようなもので、より良い解決が得られます。私は職場でSphinxを使用しており、mysqlのフルテキスト検索機能よりも優れていることがわかりました。既存のシステムに統合することも非常に簡単です。前述したように

も異なるフルテキスト検索オプションについて(参考文献を含む)php mysql fulltext search: lucene, sphinx, or?私の元の質問

+0

+1。あなたのデータセットが "巨大"であり、検索が重要な場合は、データベースでそれをやろうとしないでください - 検索エンジンを使用してください。 – nathan

+0

検索エンジンはデータベース検索ほど高速ではありません。 – omg

+0

MYSQLのデフォルト全文検索と同じくらい、より多くのパフォーマンスがsphinxですか? – omg

3

を参照してください、それがデータセット、ワークロード、そしてあなたがそれを設定する方法の間に多くのことを異なります。

たとえば、GINベースの全文索引は検索には非常に高速ですが、挿入/更新には非常に時間がかかります。 GISTベースの索引は検索には時間がかかりますが(かなり速いですが)、挿入/更新がはるかに高速です。

データベース機能を必要としない場合は、rawパフォーマンスのためにsphinxまたはluceneを参照することもできます。 PostgreSQLの統合全文検索の最大の利点は、それがちょうど統合されていることです。それはトランザクションをサポートしています。回復サポート。スナップショットのサポート。データベースにとって非常に重要なものすべて。しかし、db機能を必要としない場合、これらの要件を下げるソリューションはおそらくより高速です。

10

私は、大規模なデータセットで数年前にベンチマークを実行していることが見つかりました:

  • MySQLのFULLTEXT

はかなり遅いです。もう一つの欠点は、多くの問題を引き起こすMyISAMをあなたに強制することです。また、インデックスが一定のサイズに達すると、インデックスの更新はかなり遅くなります。新しい行を挿入すると、インデックスのかなりの部分が再生成されます。数百メガバイトのインデックスがフォーラムポストを挿入するだけで書き直されることがあります。言い換えれば、PostgreSQLの全文

約10~100倍です。これはポストの数メガバイトを持つ小さなフォーラムのためにOKですが、ウィキペディアはそれを使用しない理由はあり...

  • MySQLの全文よりも高速で、はるかに強力です。要点は挿入/更新が速く、ロックに問題はありません。つまり、まったくまともな解決策です。

    MVCCのためにデータセットがRAMより大きい場合、検索は遅くなりますが、postgresはヒープをヒットして行の可視性をチェックする必要があります。これは将来のバージョンで変更される可能性があることに注意してください。クエリで10行が返された場合は問題ありません。ただし、WHERE(全文問合せ)ORDER BY日付LIMIT 10を選択し、全文が10.000行と一致するようにすると、かなり遅くなることがあります。 MySQLよりもまだ高速ですが、望む性能はありません。

    • Xapian:私はこれをテストしました。評判の良いLuceneとSphinxもあります。

    Xapianはデータベースと同じ制限に準拠する必要はないため、より多くの操作を行うことができます。たとえば、シングルライターのマルチリーダー同時実行モデルであるため、バックグラウンドでインデックスを更新するための更新キューが必要になります。また、ディスク上に独自のフォーマットがあります。結果は、データセットがRAMよりもはるかに大きいときでさえ、特に、多くの行と一致し、並べ替えを行い、最も関連性の高いものだけを返す複雑なクエリでは、信じられないほど高速です。

    インデックスも巨大で、おそらく重複したものがたくさん含まれています。結果は、それを検索する必要はないということです。

    基本的に、PostgresがIOシークウォールをヒットした後、MySQLは長く死んでいました。

    しかし、それはデータベースにうまく統合されていないので、使用することがより多くの作業です。巨大なデータセットがあれば、それだけの価値があります。これがあなたの場合、試してみてください、それは素晴らしいです。あなたのデータセットがRAMに収まるならば、ポストグルはちょっとした面倒をなくして動作します。また、全文検索とデータベース検索を組み合わせたい場合は、統合が重要になります。

関連する問題