データベース関連の知識、「高性能のMySQL」と2「を達成するために、データベース・システム」をお読みください。包括的二本がよく見えます。「ハイパフォーマンスMySQLは、」原則の視点から「を達成するために、データベース・システム」、ビューのポイントからスタート。関連する知識学習強迫観念のデータベースを持っていたとき、我々はそれがどのように実装されるかを理解する必要があり、直接「MySQLのカーネル:InnoDBストレージエンジン」を買った結果は、棚上げ読み取ることができません。
知識データベースは、個人的には、以下の順序が合理的であると感じています。
ハードディスク
第二章では「達成するデータベースシステム」は、単独章では、ディスクストレージの原理を説明します。コンピュータは、ハードウェアへの組み込みコンポーネントのみハードディスクの永続ストレージ容量で、ソフトウェアで死亡を持っているためです。そのため、設計ソフトウェアの背後にある論理を理解するために、ディスクストレージの特性を理解します。ディスクストレージは、次の特徴があります。
-
特性A:遅延に比べてCPU、ディスクの待ち時間は非常に、非常に大きいです。1〜10ミリ秒の機械的なハードドライブの1つのI / O遅延、3.3GHzのCPUのために、行って比較した「トップのパフォーマンス」であり、命令サイクルは0.3nsです。CPUの命令サイクルが1秒であれば、その後、機械的なハードディスクI / Oの遅延が1ヶ月から12ヶ月でどれだけ、とのギャップ。花は感謝しているまで、本当に待ちます。
-
特性B:ディスク・ブロック・デバイスは、各ブロックによって書き込まれます。通常、ブロック512バイト。ハードドライブの使用という、注意を払わなければなりません
不能用轮船只运输一个土豆到美国
。 - 特性C:ランダムIO性能のIO性能の順番よりもはるかに高いです。IOの順序は避けているので、時間と回転待ち時間を求めます。
上記機能は、例えば、データベースの設計だけでなく、オペレーティング・システムの設計に大きな影響を影響するだけでなく、page cache
読み取りと書き込み
データベースの動作は、基本的に高次リテラシーです:私たちが最も頻繁に操作に使用するデータベースを更新/選択して削除します。そのため、データベース・アドレスコアの問題は読み取りと書き込み、高い性能を実現するために、データを整理する方法です。
###トランザクション
高いパフォーマンスが同時読み取りを無視し、同時シナリオで書くことができない、データの整合性の問題があるでしょう。だから、事务
データの整合性の問題を解決するために使用されます。
デフォルト各SQL文がトランザクションである、あなたは、このルールは、コミット・ポイントの変更を手動で設定することができます
MySQLでは、トランザクション分離レベルが4にあります。4つの事実は、ない丸暗記、アプリケーションシナリオから派生することができます。
非コミット読み取り
変更されたレコードのものではなく、提出され、トランザクションBはテーブル、リード・トランザクションを読み込みます。これがあります未提交读
。当社独自の設計データベース場合は、コントロールの他に手段がない場合、それは同時実行の下でどうなる、元のデータのフィールドを変更します。ダーティデータを読み出しているので、また、ダーティ・リードとしても知られています。这里我们也可以将事务换一个熟悉的概念:线程来理解
コミット読みます
上記について未提交读
問題、スコープの内政に保存されている変更された場合、そのコミットされていないデータが他のトランザクションには影響しません。この分離レベルは、コミット読み取りです。また、非反復可能読み取りとして知られています。あなたの内側の二回のミスの実装が異なる結果を得ることができますので。
反復可能読み取り
直面した読み取りによって提出された非反復可能読み取りの質問可重复读
分離レベルで回避。それは、繰り返し同じレコードが変更されません読んで取引を保証することができます。もちろん、内政レコードの変更、およびその他の場合は語りました。この問題は、別のレベル[ファントム読み取り]によって引き起こされます。これはよく理解されている2つのトランザクションを。リード・トランザクションが存在しないレコードを書き込まれ、Bの取引記録が書かれています。トランザクション書き込み失敗の可能性ケースが発生します。
Serializableを
トランザクションの実行順序。最小演奏練習。
指数
クエリデータは、通常、2つの典型的なシナリオを持っている:等值查询
と区间查询
。それはありますselect * from table where field=a
かselect * from table where field between a and b
。インデックスがなければ、唯一の方法は、全表スキャンです。それは干し草の山のアプローチで針です。そしてどのように最適化問題:プログラマは、一般的に、2つのポイントに焦点を当てています。同等のクエリの場合、ハッシュを最適化するための最良の方法。並べ替え:それは隠されたロジックを持っているので、範囲クエリの場合、いないハッシュアルゴリズムは、入ってきます。ソートされた配列、リンクリスト:典型的には、データ構造は機能を選別して提供されます。テーブルをジャンプします。AVL木、赤黒ツリー、Bツリー、B +ツリー。
なぜB +ツリー?
- ハードブロックデバイス。B +ツリーを使用し、それによってBツリーのレベルを制御する三つの層を超えない、N個の要素の同じブロック内に収容することができます。IOの数の減少。
- B +は、ノードがリストを残しています。ディスクIO操作を容易にするため。
演奏
パフォーマンスは応答時間です。アイデアは、パフォーマンスの問題にトップダウン方式のトラブルシューティングをすることです:
- CPU、メモリ、ネットワーク、IOは、ハードディスクはOKですか?
- ないOKだけで3例:不十分な余白や設定不合理や注文のうち。
- 手にテーブルの構造、クエリオプティマイザその頭を最適化するインデックスの最適化、。
パフォーマンスの問題は、オペレーティング・システムに関連するより多くの知識を必要としています。
コピー
これは、MySQLのキラーです。複製がなければ、MySQLはそんなに人気にすることはできません。コピー機能から生じる:個別の読み取りと書き込み、負荷分散、高可用性、フェイルオーバー、バックアップ、テストをアップグレードしてください。メインストリートには、虐待の概念です。
方法のコピー:ベースのログと行ベースのレプリケーションをコピーします。
スケーラビリティ
スケーラビリティは、リソースの容量を増やすことで、システムの能力を向上させることです。そのような別個によってMySQLのように読み取りおよび書き込み、スレーブに各ノードを追加し、データベースの同時実行レベルの読み取り能力が向上しています。もちろん、システムの階層ため、各レベルは、システム全体のスケーラビリティは、スケーラビリティのために修飾されてサポートしています。
データベース・レベルの一般的な戦略は、これらの戦略のサブライブラリーサブテーブルを拡大することです。
また、システムのパフォーマンスとスケーラビリティは、二つの異なるものです。ハイブたとえば、低パフォーマンスが、それはその拡張性には影響を与えません。
ハイアベイラビリティ
可用性は、基本的に少ないダウンタイムです。もしコンピュータ、わずか50%の人、1日8時間の作業、人々のわずか33%の可用性の一般的な可用性の観点から、他の人。
可用性の高いトップダウン、唯一の二つの方法を使用してのアイデアは:提升平均失效时间间隔
要するに、可能な限り2つの時間間隔の途中でシステムをダウンさせることです。降低平均恢复时间
要するに、修理に時間外でありますよりよい短いです。そのため、より可用性の高いアーキテクチャは、MySQLの相互バックアップ、ロードバランシングなどのもの、のレベルです。
バックアップ
バックアップが簡単にトピックを見落としています。通常、これらのキー瞬間の一つは私を運ぶために必要な参照するのを待ちます。災害復旧、監査、テスト:3つの基本的なバックアップの役割があります。
「ハイパフォーマンスMySQLの」本は深さと幅のバランス、それほど読書の開発のための細部の原理です。あなたはより詳細な研究をしたい場合は、推定「データベース・システムの実装では、」より適切な本です。