1

私は、パフォーマンス上の理由から NoSQL への移行を検討しているプロジェクトの段階にいます。数百万行のテーブルが確実にあるので、NoSQL が役立つかもしれません。しかし、私の問題は、このデータを使用して多くの計算も行っていることです。レールがまだすべての計算を行う必要がある場合、パフォーマンスが大幅に向上するかどうかはわかりません。

ここで、必要なデータとその処理方法について説明する別の質問があります。

自分のコードの大部分を SQL で実現し、1 人のユーザーを他の 1000 人のユーザーと照合した後も、

Completed 200 OK in 104871ms (Views: 2146.0ms | ActiveRecord: 93780.5ms)
(on my local machine with sqlite)

そして、それは私には受け入れられません。これが機能するように、テーブルを1つに非正規化することは間違いなく可能です。しかし、これによりパフォーマンスが向上しますか?

また、計算された一致率をデータベースに格納することも考えましたが、それでは 5 万人のユーザーに対して 25 億行になることになります。

4

3 に答える 3

3

Saravanakumarが述べたように、計算されたデータを非正規化すると、パフォーマンスが確実に向上する可能性があるため、重い計算にはお勧めします。また、テーブルを結合するときは、インデックスを追加する必要があります。もう1つのオプションは、結合に大きく依存するクエリのパフォーマンスを向上させることができるSQLビューを使用することです。(https://github.com/ryanlitalien/rails_sql_viewsをご覧ください)

もう1つのポイントは、SQLiteからNoSQLへの移行は大きなステップになる可能性があるということです。小さなステップは、すでにパフォーマンスを向上させるMySQLに切り替えることかもしれません。私の意見では、現時点で最高のSQLDBであるPostgreSQLがさらに良いでしょう。

于 2012-10-19T10:15:56.293 に答える
3

非正規化は間違いなくパフォーマンスを向上させます。クエリで選択された列のインデックスを追加します。文字列の代わりに ID をクエリし、メモリ内に (文字列から ID への) マッピングを行います。他のテーブルと結合しないため、非正規化によりパフォーマンスが向上します。

于 2012-10-19T10:08:20.447 に答える
0

私があなただったら、mysql と postgresql を使用して、テーブルをより適切に非正規化しようとします...

NoSql は非正規化よりも常に高速であるとは限らず、1 つのテーブルでクエリが実行されます...

データベースを切り替えることを決定する前に、両方の選択肢で正確な状況をテストしてください...

于 2012-10-20T17:54:19.663 に答える