-1

MySql データベースと Hibernate を使用してアクセスするソフトウェアを開発しています。私が抱えている問題は、すでに 40,000 のクエリを使用している 1 つのキーワードを探すときに、開発中のアプリケーションが複数のキーワードを処理できるはずであることです。

したがって、基本的には文字列値で満たされたデータベースを扱っており、多くの比較を行う必要があります。今のところ、フィルタを使用して、考えられるすべての一致をメモリにロードし、それらを Java コードで比較します。これは非常に再帰的で遅いです。

したがって、明らかに MySql とほとんどの Hibernate は適していません。誰でも、どのデータベースがより良いパフォーマンスを提供するかについての情報を提供してもらえますか? Hypertable、MongoDb、Hbase、Graph Database などを検討していますが、どの方法を使用すればよいかわかりません。

助けてください。ありがとう

4

3 に答える 3

2

あなたのアプローチは間違っており、MySQL がネイティブに行うことを行っています。データセットを RAM に保存し、そこから操作することができます。これは、アルゴリズムで行っていることです。

もう 1 つは、テキスト検索などの特定の処理については、そのような目的に特化した既知の方法とさまざまなストレージ エンジンが存在することです。たとえば、スフィンクスもその 1 つです。

もう 1 つのことは、 trieなど、検索を高速化するある種のデータ構造を実際に使用することです。これは、オートコンプリートなどを実行するのに非常に役立ちます (これは、質問に直接接続する必要のない単なる例です。文字列で高速に動作する既知のデータ構造があるというヒント)。

また、大量の文字列データを比較する場合、なぜ NoSQL ソリューションの方が速いと思いますか?

他の人が指摘しているように、基盤となるテクノロジーではなく、アプリの設計とアルゴリズムが原因のようです。質問ではより正確に、何をしているのか、どのようにしているのか、何をしたいのかを概説する必要があります。これらの質問に答えると、間違ったアプローチをとったように見えるため、人々は問題を解決するための正しい方向性を示すかもしれません。

于 2011-05-04T13:53:31.197 に答える
0

おそらく私はあなたの質問を誤解していますが...

今のところ、フィルターを使用して、可能なすべての一致をメモリにロードし、Javaコードでそれらを比較します。これは非常に再帰的で低速です。

インメモリでデータベースの仕事をしようとしているように聞こえますか?インデックスを作成し、より適切なSQLクエリなどを記述しますが、可能なすべての一致をロードし、それらを反復処理していますか?その時点で、なぜデータベースを使用するのでしょうか。

基本的に、それがデータベースの選択だとは思いません(MySQLは40,000レコードよりもはるかに大きなクエリを問題なく処理できます)。あなたのアルゴリズムにはいくつかの作業が必要だと思います。

于 2011-05-04T13:42:51.673 に答える
0

あなたの本当の問題は、40,000 クエリを使用することです。

非常に多くのクエリにつながる問題とプロセスを説明できますか?

使用するデータベースに関係なく、アルゴリズムが過剰に聞こえるため、常に遅くなります。

まずは直しましょう。

于 2011-05-04T13:37:31.310 に答える