ストレージエンジンの
コンセプト
データベースのストレージエンジン基礎となるデータベース・ソフトウェア・組織で、データベース管理システム(DBMS)を作成するために、データエンジンを使用して、クエリ、更新、削除データ。別々のストレージエンジンが異なるストレージメカニズム、索引技術、ロックレベルおよび他の機能を提供し、異なるストレージエンジンを使用することは、あなたはまた、特定の関数を得ることができます。多くの異なるデータベース管理システムは、異なるデータエンジンの様々なサポート。
メインストレージエンジン:1のMyISAM、InnoDBの2.、3.メモリ、4.アーカイブ、5フェデレーション。
InnoDBの(B +ツリー)
InnoDBはページのInnoDBに各ノードの対応は、ページサイズは通常16Kに設定する、固定されているストレージ構造B +ツリー、Bツリーの下にあります。これでは非リーフノードは、キー、リーフノードは、完全なデータが含まれています。
データベース:ストレージエンジンInnoDBの+ + + TokuDB MyIASM +メモリ + インデックス+のような3つのパラダイム
アプリケーションシナリオ:
1)頻繁に更新テーブル、複数の同時の更新要求処理。
2)トランザクションをサポート。
3)災害から(ビン・ログログなど)によって回復することができます。
4)外部キー制約。彼のサポート外部キーのみ。
5)自動増加カラムはAUTO_INCREMENT属性サポート。
TokuDB(フラクタルTREE-バンド・データ・ノード)
TokuDB基礎となるストレージフラクタルツリー構造は、幾分同様のフラクタルツリー及びB +ツリー構造は、フラクタルツリー、各子外部に加えて、子ノードを指すポインタだけでなく、メッセージ・バッファで、これはメッセージバッファFIFOのありますキュー、キャッシュを更新します。
例えば、ノードだけを挿入1つの必要がメッセージバッファがすぐに返されます落ち、あなたはリーフノードを検索する必要はありません。これらのアップデートは、対応するノードに、バックグラウンドの非同期クエリまたは合併のアプリケーションにキャッシュされます。
ストレージエンジン+ InnoDBは+ TokuDB + MyIASM +メモリ + インデックス+のような3つのパラダイム:データベースは
、読み取りおよび書き込み操作には影響を与えませんTokuDBオンラインインデックスを追加し、非常に高速な書き込み性能は、フラクタルツリーは、トランザクションの実装であるという利点を有します。彼は主に適用頻度の低い訪問するか、過去のデータをアーカイブします。
MyIASM
MyIASMは、MySQLデフォルトのエンジンであり、それはデータベーストランザクションのサポートを提供していない、行レベルのロックをサポートしていない、および外部キーので、INSERT(挿入)またはUPDATE(更新)データ書き込み動作は、テーブル全体をロックする必要がある場合、その後、効率それは低くなります。
ISAM速度読み出し動作が迅速に実行され、メモリおよびストレージリソースの多くを取ることはありません。予想設計の初期データでは順次保存され、固定長レコードに編成されています。
--- ISAMは欠点は、トランザクションをサポートしていないということである、静的インデックス構造です。
メモリ
ヒープメモリ(HEAPまたとして知られている)メモリ:メモリの内容の存在は、テーブルを作成するために使用します。各MEMORYテーブルは実際にディスクファイルに対応しています。MEMORY非常に高速テーブルアクセスタイプ、データ、それがメモリにあるように、そしてHASHを使用して、デフォルトのインデックス。サービスがシャットダウンされた後しかし、データがテーブルから失われます。メモリサポートとハッシュインデックスBツリーインデックスは、Bツリー索引を部分クエリで使用されたクエリを渡すことができる、<、>、およびデータマイニングを容易にするような> =演算子、ハッシュインデックスが範囲に等しい、比較的迅速に使用することができます比較的はるかに遅いです。
インデックス
ヘルプのMySQLへのインデックス(指数)は、効率的にデータのデータ構造を取得します。共通クエリアルゴリズム、シーケンシャルサーチ、バイナリ・サーチ、バイナリソートツリー検索、ハッシュハッシュ、ブロック検索、複数の検索木バランスBツリー(Bツリー)
共通のインデックスの原則
一意のインデックスを選択します
ユニークなインデックス値は一意であり、より迅速に特定のレコードインデックスにより決定することができます。
2.多くの場合、グループ化や共同フィールドオペレーションのインデックス作成、並べ替えが必要です。
3。多くの場合、クエリとしてインデックス付きフィールド。
4。インデックスの数を制限します。
より多くのインデックスは、テーブルを更新するのは時間の無駄になります。
データインデックス少量の使用の可能性
インデックスの値が非常に長いです、その場合は、クエリの速度が影響を受けることになります。
インデックスに接頭辞を使用するようにしてください6。
インデックスフィールドの値が非常に長い場合、接頭辞は、好ましくは、インデックス値に使用されています。
7。未使用または少し-使用されるインデックスを削除します
8.最も左前方一致の原則、非常に重要な原則。
指標として、高感度の列を選択する9
10.式の判別は、フィールドの割合は省略するあります
11.インデックス付きの列は、「クリーン」の列を維持するために、計算に参加することはできません:クエリ機能は、インデックスに参加しません。
拡張インデックスに12しようとすると、新しいインデックスを作成しないでください。
三つのデータベースパラダイム
最小の冗長性を有するパラダイムテーブル構造。次のようにパラダイム:
パラダイム最初(第一NF - 分割することはできません記載されています)
各列の最小のデータユニットが細分化されていない場合、(また、最小の原子単位と称する)第1正規形(1NF):第一の目的は、各列のパラダイム原子を確保することである
データベース:ストレージエンジン+ InnoDBの+ TokuDB + MyIASM +メモリ+インデックス+ 3つのパラダイムなど
第二のパラダイム(2 NF-各テーブルは一つだけを記載)
まず、第1正規形で、そしてテーブルには主キーの主キー列アフリカは部分的に依存して存在していません。第二のパラダイムは、各テーブルには一つだけを記述する必要があります。
データベース:ストレージエンジンInnoDBの+ + + TokuDB MyIASM +メモリ + インデックス+のような3つのパラダイム
第3正規形(非プライマリキーカラム上の伝送依存性の第三NF-不在)
第三のパラダイムが定義され、満足第パラダイム、およびテーブルの列は、非プライマリキー列の送信が存在しないことに依存します。主キーの順序番号に加えて、顧客名は、非プライマリキーの顧客IDに依存します。
データベース:ストレージエンジンInnoDBの+ + + TokuDB MyIASM +メモリ + インデックス+のような3つのパラダイム
データベーストランザクション
トランザクション(トランザクション)のいずれかが実行され、システム全体として、これらの操作は、一緒に提出するために実行される作業の単一の論理ユニットとしての一連の動作または実行されません。トランザクションは、作業の論理単位です不可分
トランザクションは、次の4つのプロパティを持っている必要があり、ACID特性と呼ばれます。
アトミック(不可分)
- トランザクションが完了し、オペレーティングあります。各トランザクション・ステップ動作は(原子)不可分であるか;または実行か実行されます。
一貫性(一貫性)
-
トランザクションが完了すると、データが一貫性のある状態でなければなりません。絶縁(アイソレーション)
- すべてのデータは、それがどのような方法で影響を与えたり、その他の事項に依存してはならないトランザクションは独立していなければならないことを示し、互いに分離されている同時トランザクションを変更することができます。
永続性(耐久性)
- トランザクションが完了したら、それは、トランザクションログは永久的なトランザクションを維持するために、そのデータベースが永続的に保持されて変更します。
ストアドプロシージャ(特定の機能を設定するためのSQL文)
コンパイルされ、データベースに格納され、特定の機能を設定するSQL文のセットを完了するために最初の呼び出しは、ストアドプロシージャのパラメータで指定されたユーザ名(パラメータを持つ場合、ストアドプロシージャ)が与えられ、再び再コンパイルする必要はありません後それを実行します。ストアドプロシージャは、データベース内の重要な課題です。
ストレージプロセスの最適化のアイデア:
-
いくつかの小さなサイクル、例えば集約機能、平均機能などを交換するために、いくつかのSQLステートメントを使用してみてください。
-
一時テーブルに格納されている中間結果は、インデックスを追加します。
-
以下は、カーソルを使用しています。SQL言語は、より高い性能を有する一連の動作のために、設定されています。カーソルは、プロセスの操作です。例えば、データの100万行が照会されます。代わりに、カーソルを使用すると、テーブルに100万回を読む必要はカーソルだけ数回読んで、少量を必要としています。
-
できるだけトランザクション短いです。SQLServerの同時操作をサポートしています。トランザクションが長すぎる、または分離レベルが高すぎる場合、それはブロックし、デッドロックの同時動作になります。スロークエリ、CPU占有率極地で結果。
-
使用のtry-catchエラー例外処理。
- 循環に配置された文を見つけることができません試してみてください。
(自動的に実行するプログラムのための)トリガー
自動的に、実行されるプログラムセクションをトリガ特殊なストレージ・プロシージャ、トリガーを、通常の手順の間の差が格納されている。トリガがトリガされたときに動作テーブルの一。例えば:更新、挿入、これらの動作を削除すると、システムは自動的にテーブル上の対応するコールトリガーを実行します。彼らは、データ定義言語文の様々な影響を与えるだろうDMLトリガーとDDLトリガー、DDLトリガーは、これらのステートメントは、ALTER、DROP文を作成している励起されています。SQL Server 2005のトリガは、2つのカテゴリに分けることができます。
データベースの同時方式
一般的な同時実行制御する3つの方法、すなわち、楽観と悲観的ロックとタイムスタンプ。
オプティミスティック・ロック
データを読み取る際オプティミスティック・ロックは、ユーザーを考えて、自分のデータを書き込むことが誰も読まない、逆に悲観的ロックを、彼は、他の人が単にデータだけを読んで、自分のを書くことができ、データベースを読むことを、実際には、ホールドA保守的な態度、制御の問題にロックされていないタイムスタンプは、スタンプを通して同時に起こります。
ペシミスティック・ロック
データを読み取る際に悲観的ロック自身が読み取ったデータを修正するために他人を防ぐために、である、彼らはあなたがデータを読み込み、データのみの部分を修正するために他人を許すことができ、最初のロック独自のデータを読み込む、または抗ます来て、言った、データは他の人が読むことを許可していないときに、データの特定の部分に変更を加えることで、アクセスするデータの一部を他のユーザーに許可する前に、自分のプラスロックの解除前に提出したので、唯一の彼らの全体の取引。
タイムスタンプ
タイムスタンプより前は、このような「タイムスタンプ」として、個別のデータベーステーブルに加えてタイムスタンプである、それぞれが時間の、またデータベースで、フィールド、フィールドプラス1に書き戻し、提出することに読み出す読み出しデータベースの値よりも大きい場合には、このアプローチは、データベースシステムによって提供されるロック機構を使用していないが、この方法は非常に同時データベース処理量を増加させることができ、よりもののフィールドの比較は、それは、そうでなければ保存することができない、あなたが保存することができ排他ロック(書き込みロック)と共有ロック(ロックを読み取る):悲観的ロックは、「ロック」を追加すると、実際にいくつかのロックに分割されます。
ロックデータベース
行レベルのロック
行レベルのロックは、この行を変更する他のトランザクションを防ぐために、排他的ロックである、次のステートメントを使用する場合、Oracleは自動的に行レベルのロックを使用します。
-
INSERT、UPDATE、DELETE、SELECT ... [列の] UPDATE [WAIT FOR N | NOWAIT];
-
SELECT ... FOR UPDATE文複数のレコードをロックするユーザーが更新することができます
- 使用して、COMMITまたはROLLBACK文は、ロックを解除します。
テーブル・レベル・ロック
テーブル全体の表現は、それがMySQLのエンジンのほとんどでサポートされている、シンプル、低資源消費で、現在の操作をロックします。MYISAMとInnoDBは最も一般的に支持テーブルレベルのロックを使用します。共有読み取りロック(共有ロック)にテーブルのテーブルレベルのロックと排他的書き込みロックテーブル
(排他ロック)。
ページレベルのロック
MySQLのページレベルのロックがロックされ、ローレベルの間の粒子サイズは、中間体A表ロックラッチをロックします。テーブル・レベルのロックは、高速であるが、より多くの競合、より少ない行レベルの競合が、遅いです。だから、ページレベルの妥協点を取る一度隣接するレコードのグループをロック。BDBはページレベルロックをサポート
継続するには............
仕上げは容易ではない、完全なPDF文書ジュニアパートナーが突くしてください必要があります。
https://shimo.im/docs/TC9Jq63Tp6HvTXdg/