6

私のPHPアプリケーションでは、1台のサーバー上のMySQLMyISAMパーティションテーブルに200GBの470M行のテーブルがあります。使用量には、70%の書き込み/ 30%の読み取りが含まれます。パフォーマンスを改善しようとしています。現在の主な問題は、テーブルレベルのロックによる読み取り/書き込みの競合です。私は2つのオプションのどちらかを決定しようとしています:

  1. MySQLをInnodbに変更します。長所:テーブルレベルのロックを回避します。短所:はるかに多くのディスク容量が必要であり、これらほど高速ではない可能性のあるより大きなHDが必要です(現在、RAID10 6 * 300GB SAS 15kを使用しています)。
  2. データをNoSQLデータベースに移動します。主な欠点:学習曲線。これまでNoSQLを使用したことはありません。

問題は、データのシャーディングを回避しようとしている一方で、RDMS MySQLを単純なKey-Valueストレージとして使用しているという事実を考慮すると、2つのアプローチのパフォーマンスに大きな違いがあるのか​​、それともNoSQLの主な利点は次の場合にあるのかということです。分散システムに移行しますか?

4

1 に答える 1

3

私はあなたの質問に部分的にしか答えることができませんが、うまくいけばコメント以上のものです.

通常、MongoDB はキー値ストアではなく、キー値ストアとして使用するとパフォーマンスが低下することが知られています。

MongoDb にもここでロックの問題があり、それが戻ってきてあなたを悩ませる可能性があります。DB レベルのロック atm があるため、書き込みロックの飽和が発生する可能性があります (テストが必要です)。

また、80% の読み取りアプリ (現在の Web サイトで最も一般的な設定と言われています) 向けに設計されているため、書き込みが多いほど、時間の経過とともにパフォーマンスが低下することに気付くでしょう. そうは言っても、MongoDB を微調整してより書き込みやすくすることができ、分散型の性質により、書き込みロックの飽和を少し防ぐことができます。

ただし、SQL からの MongoDB の学習曲線についての私の個人的な意見は次のとおりです。

  • 隣にいたnull
  • SQL よりも自然で簡単にアプリに実装できます
  • クエリ言語は単純なので、理解するのは非常に簡単です
  • クエリ言語は SQL と多くの類似点があります
  • ドライバーは標準化されているため、コンソールの JS ドライバーのドキュメントに表示される構文は全体的に一貫しています。

一般的な問題に関する私の個人的な意見は、その分散された概念です。キー値ストア用に設計された NoSQL ソリューションを入手できれば、それは非常に優れたものになる可能性があります。Google で簡単に検索すると、ウィキペディアで NoSQL キー値ストアの小さなリストが見つかりました: http://en.wikipedia.org/wiki/NoSQL#Key-value_stores_on_solid_state_or_rotating_disk

于 2012-09-25T10:21:03.033 に答える