ホームページ  >  記事  >  データベース  >  mysqlを最適化しますか、それともキャッシュを使用しますか?

mysqlを最適化しますか、それともキャッシュを使用しますか?

伊谢尔伦
伊谢尔伦オリジナル
2016-11-24 11:30:171113ブラウズ

具体的には、私が比較したい 2 つの最適化戦略は、MySQL とキャッシュの最適化です。これらの最適化は相互に関係しており、どちらかを選択する唯一の理由は、どちらもリソース、つまり開発時間にコストがかかるためであることを、事前に指摘してください。

mysqlを最適化しますか、それともキャッシュを使用しますか?

MySQL の最適化

MySQL を最適化するときは、通常、まず mysql に送信されたクエリ ステートメントを確認してから、explain コマンドを実行します。少し見直した後の一般的なアプローチは、インデックスを追加したり、スキーマに調整を加えたりすることです。

利点

1. アプリケーションを使用するすべてのユーザーにとって、最適化されたクエリは高速です。インデックスは対数的な複雑さの速度でデータを取得し (電話帳を検索するときの分数化とも呼ばれ、検索範囲が徐々に狭くなります)、データ量が増加しても良好なパフォーマンスを維持するためです。インデックスのないクエリの結果のキャッシュは、データが増大するにつれてパフォーマンスが低下する場合があります。データが増大すると、キャッシュを見逃したユーザーは不快な経験をし、アプリケーションが使用できなくなる可能性があります。

2. MySQL を最適化するとき、キャッシュの無効化やキャッシュされたデータの有効期限について心配する必要はありません。

3. MySQL を最適化すると、技術的なアーキテクチャが簡素化され、開発環境でのコピーや作業が容易になります。

短所

1. クエリによっては、インデックス作成だけではパフォーマンスを向上させることができず、場合によっては、アプリケーションによっては非常に面倒なモードの変更も必要になる場合があります。

2. 一部のスキーマ変更は非正規化(データのバックアップ)に使用される場合があります。これは DBA にとって一般的な手法ですが、アプリケーションによってすべてが更新されるようにするために所有権が必要になるか、そのような変更を保証するためにトリガーをインストールする必要があります。

3. 一部の最適化方法は MySQL に固有の場合があります。つまり、基盤となるソフトウェアが複数のデータベースで動作するように移植されている場合、インデックスの追加以外のより複雑な最適化手法の一部が普遍的であることを保証するのは困難です。

キャッシュの使用

この種の最適化では、アプリケーションの実際の状況を分析し、高価な処理部分を MySQL から分離し、memcached や Redis などのサードパーティのキャッシュに置き換える必要があります。

利点

1. 大規模な集計やグループ化クエリなど、MySql 自体による最適化が難しい一部のクエリでは、キャッシュがうまく機能します。

2. キャッシュは、システムのスループットを向上させるための良い解決策である可能性があります。たとえば、複数の人が同時にアプリケーションにアクセスすると、応答速度が非常に遅くなります。

3. キャッシュは、別のアプリケーションの上に構築する方が簡単かもしれません。たとえば、アプリケーションは MySQL を使用してデータを保存する別のソフトウェア パッケージのフロントエンドである可能性があり、このソフトウェア パッケージにデータベースを変更することは非常に困難です。

短所

1. データが複数の外部アクセスパラダイムを提供する場合(たとえば、異なるページに異なる形式で表示される)、キャッシュの有効期限切れや更新が困難になる可能性があり、および/または期限切れを許容する必要がある場合があります。データ データ。実現可能な代替案は、より高度なキャッシュ メカニズムを設計することです。もちろん、キャッシュを複数回取得すると待ち時間が増加するという欠点もあります。

2. 高価なオブジェクトをキャッシュすると、キャッシュを見逃したユーザーにとって潜在的なパフォーマンスの違いが生じる可能性があります (MySQL を最適化する利点 #1 を参照)。優れたパフォーマンスの実践では、ユーザー間の差異を単に平均化するのではなく (キャッシュがそうする傾向にあります)、ユーザー間の差異を最小限に抑えるよう努めるべきであることを示唆しています。

3. 単純なキャッシュ実装では、雪崩効果などのいくつかの微妙な脆弱性に対処できません。つい先週、私は、同じキャッシュされたコンテンツを同時に再生成しようとする複数のユーザー要求によってデータベース サーバーが圧倒されている人を支援しました。正しい戦略は、キャッシュ再生成リクエストをシリアル化するために、ある程度のレベルのロックを導入することです。

まとめ

通常の状況では、最初に MySQL を最適化することが私の意見では最も適切な解決策であるため、ユーザーにはまず MySQL を最適化することをお勧めします。しかし、長期的には、ほとんどのアプリケーションには、上記のソリューションをある程度同時に実装する必要があるいくつかのユースケースが発生することになります。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。