1

大量のデータを処理できる多言語の MySQL データベース構造に関するアドバイスを探しています。現時点では、次の方法を使用しています。

Articles  <- Article_translations -> Languages
id           id                      id
date         language_id (fk)        locale
category     article_id  (fk)   
             content

わかりました、100.000 の記事と 5 つの言語を持っているとしましょう...まあ、問題がわかります。データが大きいほど、データベースは遅くなります (ここでは推測ですが、絶対に必要な複雑な JOIN クエリはおそらく O(log(n)) ではなく、O(n^2) のようなものになります)。

現在の解決策は、Article_translations を [locale]_article_translations (例: en_us_article_translation) に分割することです。この場合、これらのテーブル間の構造を簡単に同期する必要があります。これはこの問題を解決するための適切な方法ですか、それともより良い方法がありますか? これが良い解決策である場合、変更を監視し (構造のみで、データの同期はありません!)、それらの構造を同期するのに役立つものはありますか?

4

2 に答える 2

1

あなたは半分正しいです。データが大きいほどデータベースは遅くなりますが、DB の設計が適切でない場合、小さなデータでも遅くなります。

何が最善の方法か最善の解決策かはわかりませんが、「最善の解決策」を見つけるには、複数のことを行う必要があることを忘れないでください。役立つツールとヒントをいくつかお勧めします。

まず、インデックス、インデックスの種類、PK と FK だけでなく、必要なインデックスの種類も確認する必要があります。IE、テキスト インデックスが必要ですか? またはハッシュツリー??。

エンジン、MyISAM または InnoDB も確認してください。テーブルを分割したとおっしゃいましたが、分割に関するこの投稿を確認してください。

またlike '%word%'、悪いクエリは応答時間に大きな違いをもたらすことを覚えておいてください。

Show create tableまたは Describe select ......またはを使用explainして、何が起こっているかを確認したり、コマンドbenchmarkを使用して、改善のために適用している機能のおおよその時間を確認したりできます。

MySQL 用のいくつかのツール パフォーマンスのこの部分を支援するこのプログラムを参照することをお勧めします。

  • Mysqlslap (ベンチマークに似ていますが、結果をさらにカスタマイズできます)。

  • SysBench (テスト CPU パフォーマンス、I/O パフォーマンス、mutex 競合、メモリ速度、データベース パフォーマンス)。

  • Mysqltuner (これを使用すると、一般的な統計、ストレージ エンジンの統計、パフォーマンス メトリックを分析できます)。

  • mk-query-profiler (SQL ステートメントの分析を実行します)。

  • mysqldumpslow (ウィッチ クエリが問題を引き起こしていることを知っておくとよいでしょう)。

于 2012-07-09T20:00:12.477 に答える
0

クエリを適切に調整したと仮定します

  • 大量のデータセットを使用してクエリ実行プランを確認する
  • 行レベルではなく「大規模セット」としてDBレベルパラメータを使用する場合は、必ず確認してください
  • テーブルを非正規化(またはその逆)するのに十分かどうかを確認してください。

使用しているMySQLのバージョンはわかりませんが、以下をお勧めします。

  • DBレベルでのパーティショニング
  • DBサーバーの高速ハードディスク

最初にパーティショニングを使用することをお勧めします。次に、ハードディスクのアップグレードを検討することをお勧めします。

パーティショニング

パーティショニングは、データベースレベルで提供されるデータ分割です。クエリの使用法に基づいて、たとえば、ケースの言語でデータを分割できます。DBパーティショニングを使用する良い点は、

  • アプリケーション側から1つのテーブルで処理できます
  • データ量と頻度に応じて、DBレベルで並べ替えることができます。アプリへの影響はありません。

ハードディスクの品質

また、大量のデータを処理するには、ハードディスクの品質も重要です。クエリがせいぜい調整されている場合でも、1つのクエリで大量のデータを処理する場合は、高速なデータアクセスが必要です。しかし、これにはコストがかかります。

于 2012-07-09T20:14:16.953 に答える