一般的なインタビューの要約を開発するためのC ++背景知識(4)データベース

  • データベースインデックスのタイプ
  • クラスタ化インデックスと非クラスタ化インデックスの差(コンテンツを格納するリーフノード)
  • マスターキーとインデックスの間でユニークな屈折率差
  • インデックスの長所と短所、場合指数(フォーカス)を使用しない場合、索引を使用します
  • 最も左のプレフィックス問題のインデックス
  • トランザクションデータベースでACID
  • データベースのアイソレーション設定の問題(ダーティリード、反復不能読み取り、紛失を変更、ファントムリード)が異なって表示されます
  • MySQLは、シリアライズ可能なコミットされていない、コミット読み取り、反復可能読み取りを読む:4つの分離レベルを持っています。
  • MySQLの最適化(周波数、最適化の指標、パフォーマンスの最適化)
  • データベースエンジン導入、InnoDBテーブルMyISAMの特性との違い
  • データベース接続プールの役割
  • すべてのあなたは、ミューテックスロックとリーダーに加えて、ロックの話をするために使用する、このようなスピンロック、ロック再帰、楽観的ロック、悲観的ロックなど
  • 二相ロック・プロトコル
  • リレーショナルおよび非リレーショナルデータベース(それぞれの長所)との差
  • パラダイムデータベース
  • MySQLのテーブルスペースの種類、自分の特性。
  • 分散トランザクション
  • 役割とビューの使用(削除する方法、など)
  • サブライブラリーマスターコピー、別の読み取りや書き込みから、サブテーブル。(私は、全体で来ていないではないでしょう)
  • memcacheのデータ構造がどのように実装されますか
  • memcacheの、Redisの内部データ保存の原則を

インデックスタイプ(1)データベース

異なるインデックスインデックスは、異なるストレージエンジンに実装ストレージエンジンの種類や層に実装されました。

B +ツリーインデックス:インデックスは、ほとんどのMySQLのストレージエンジンのデフォルト・インデックス・タイプです。エンジンはInnoDBとMyISAMストレージエンジンなど。

ハッシュインデックスは: InnoDBエンジンと呼ばれる特殊な機能を持っている「適応ハッシュインデックスを、」インデックス値が非常に頻繁に使用されるとき、そのようにしましょう、B + Treeインデックスにハッシュインデックスを作成します。そのような高速のハッシュ・ルックアップとして、ハッシュインデックスとB +ツリー・インデックスのいくつかの利点、。ハッシュインデックスはO(1)で見つけるために時間を実行することができますが、失われた秩序は、それは次の制限があります。1は、並べ替えとグループ化するために使用することはできません。ピンポイントの2のサポート範囲や表情の一部を見つけることができません...

フルテキストインデックス:MyISAMストレージエンジンではなく、平等のための直接比較よりも、テキストでキーワードを見つけるためのフルテキストインデックスをサポートしています。代わりにWHERE通常の、MATCH AGAINSTを使用して条件を検索します。フルテキストインデックスは、一般的に、それが文書にマッピングされているキーワードを記録した転置インデックスを使用して達成されます。MySQLで5 InnoDBストレージエンジン6.4 のバージョンは、フルテキストインデックスをサポートするために始めました。

空間インデックス(R&LT-ツリー) MyISAMストレージエンジンのサポート空間インデックスは、地理データを格納するために使用することができます。すべての次元からのインデックスデータに空間データインデックスは、効果的に任意の次元クエリと組み合わせることができます。

GIS関連の機能は、データを維持するために使用する必要があります。

(2)クラスタ化インデックスと非クラスタ化インデックスの差(リーフノード格納コンテンツ)

クラスタ化インデックス:InnoDBのプライマリインデックスがクラスタ化インデックスでは、インデックスに格納されたデータは、データベーステーブルは、メインインデックス、B +ツリーのリーフノードのデータフィールドに格納された完全なデータ・レコードによって編成されています。テーブルは、唯一のクラスタ化インデックスを持つことができます。

セカンダリインデックスの主キー値のリーフノードデータフィールドが記録されるので、二次インデックスが見つけるためとき、主キーを見つけるために、及び一次インデックスをルックアップする必要があります。通常、主キーとして、主キーの自動インクリメント値ベースのインデックスではなく、単一の列にデフォルト設定。挿入新しいデータファイルをプライマリキーは良い選択であるとして、B +木の特性と頻繁に分割調整し、非常に非効率的、かつ使用自動インクリメントフィールドを維持するために記録されている場合、主キーとして一意の列となります。

非クラスタ化インデックス:非クラスタ化インデックスのMyISAM提供。MyISAMのメインインデックスとセカンダリインデックスは、非クラスタ化インデックスです。B +ツリーのリーフノード、記憶されたポインタが指している記録。


(3)との差と、一次ユニークインデクスコードインデックス

制約インデックスよりユニーク主キー制約の厳しい、主キーが設定されていない場合、唯一の非nullで主キーのインデックスが自動的に呼び出されます。主キーと一意のインデックスとの間のいくつかの相違点を中心として、以下:1つのNULL主キー値が許可されていない、一意のインデックスはNULL値を許容します。2.は、1つのプライマリキーを可能にする複数の一意のインデックスすることができます。3.一意の主キークラスタ化インデックスユニークインデックスがユニークな非クラスタ化インデックスを作成する生成します。

InnoDBストレージエンジンを使用する場合は、特別な必要がある場合は、必ず主キーとして自動インクリメントフィールドとは無関係のビジネスを使用してください。代わりに、このような主キーフィールドとして、学生数や固有のID番号として使用することを選択しました。

目的のユニークなインデックスは、アクセス速度を向上させるためには、多くの場合ではなく、データのみの重複を避けるために作成します。

(4)インデックス(フォーカス)を使用しないインデックスを使用するインデックスの長所と短所、

物価指数があるクエリの速度、最大速度にインデックスが、しかし:インデックスは、レコードの負担の挿入、削除、修正を増加する一方、インデックスファイル自体は、ストレージ・スペースを消費し、加えて、MySQLはまた、そう、インデックスを維持し、実行時にリソースを消費しますインデックスがない方が良いです。一般的には両方のケースでインデックスを作成することは推奨されません。

最初のケースでは、クエリは、全表スキャンだけで罰金を行いますので、比較的小さなテーブルのレコード、インデックスを構築する必要はありません、です。レコードの2000の数がインデックスを構築すると考えることができないよりも、通常これ以上、2000以上のインデックスが適切とみなすことができません。

もう一つのケースは、インデックスを構築し、推奨されていない選択性の指標が低いです。(オプションインデックス)


(5)は、最も左のプレフィックス問題のインデックス

インデックスはすべての列(本明細書で完全一致「=」または「IN」一致を指す)を正確に一致したときに、インデックスを使用してもよいです。

クエリの左側は正確に一つまたは複数の連続した列のインデックスと一致した場合、唯一の最も左接頭辞が条件を構成指数の使用一部にすることができます。


(6)トランザクションデータベース内のACID(4つの特徴は、アトミック関連性と一貫性、孤立として、例示及び十分に理解することができなければならない、乏しい問題が発生する可能性のあります)

アトミック:トランザクションは、トランザクションのすべての操作がすべて正常に送信、またはすべてのロールバックに失敗のいずれか、最小不可分の単位としてみなされています。ロールバックは、逆の操作がロールバックの際にこれらの変更を実行するために、会社によって行わ変更操作をロギング、ログを用いて達成することができます。

一貫性:トランザクションの実行前後のデータベースが整合性のある状態です。コヒーレンシ状態では、読み取り結果データのすべてのトランザクションは同じです。

単離:最終提出する前に変更を加えるためにしっかりと、他のトランザクションは表示されません。

耐久性:トランザクションがコミット修正したら、それはデータベースに保存されて永遠に行われます。でも、システムがクラッシュした場合、トランザクションの結果の実装が失われることはできません。データベースのバックアップとリカバリによって実現することができる、ベンの崩壊は、バックアップデータの復元を使用して、データベース、システムで発生します。

ヘッドグレードトランザクションのACID特性との関係ではありません。

  • トランザクションの結果の一貫性を満たすためにのみ正しいです。
  • 合併症のない場合、トランザクションシリアル実行では、アイソレーションを満たすことができます。限り、原子性を満たすために、この時間として、一貫性が満足することができるようになります。
  • 複数のトランザクションの同時、同時実行の場合は、トランザクションが唯一の原子性を満たしていなければなりません、隔離も会うの一貫性のために満たす必要があります。
  • 永続データベースを満たすためのサービスは、ベンの崩壊の場合に対応できるようにすることです。

自動送信モードをデフォルトのMySQL。つまり、あなたが明示的にトランザクションを開始するためにSTART TRANSACTION文を使用しない場合には、各クエリが自動的に提出したトランザクションとして扱われます。

トランザクション分離が不可能な同時の場合、ダーティリード、反復不能読み取り、失われた変更、ファントムは、他の問題を読みがあるでしょう。

 

(7)データベース分離設定の問題を(ダーティリード、反復不能読み取り、失われた、幻の読み取りを変更)異なる表示されます

失われた変更:T 1  及びT 2  の両方のトランザクションのデータ変更に、T 1  修正するために、T 2は  続いて変性、T 2は  T覆うように改変1  変化します。T 1は、変更失いました。Xは、ロック解除T1が終了するまで変更したとき、T1は、T2は、この期間中にデータを変更することはできませんデータラッチに結合されてもよいです。

ダーティ読み取り:データトランザクションT1 aを変更した後、コミットしませんでした。トランザクションT2は、データaを読み込み、その後、T1のロールバック

失効は、T2ダーティデータ読み出しデータとして、修飾されました。ダーティ・リードの問題を解決することにコミット分離レベルをお読みください。

非反復可能読み取り:同じトランザクション内で同じデータを複数回の結果を読んでも同じではありません。T 2  データを読み出すため、T 1  のデータが改変されています。T場合2は、  最初の読み出し異なるの読み取り結果の結果を再びこのデータを読み、今回。データはSロックT2におけるデータとともに読み取ることができる場合、T2はロック解除が終了するまで、この期間T1にデータを変更することはできません。非反復読み込みの問題を解決するための反復可能読み取り分離レベル。 

T:マジックリーディング1  範囲のデータを読み出し、T 2  この範囲内の新しいデータ挿入、T 1は、  データとは異なるが再び範囲を読み、そして結果は、この時点で読み、最初の読み取りの結果。上記は、また、問題を解決するためにSロックに追加することができます。

 MySQLのInnoDBストレージエンジンは、MVCC +ネクストキーロックファントムリードの問題を使用して反復読出しにおける(REPEATABLE READ)分離レベルは、解決することができます。


(8)どのようなデータベースは、MySQLの分離レベルとOracle分離レベルは

MySQLは:4分離レベルあり、シリアライズ可能なコミットされていない、コミット読み取り、反復可能読み取りを読みます。

非コミット読み取り:変更されたトランザクションは、提出されていない場合でも、他のトランザクションも表示されます。常に非コミット読み取り分離レベルで最新のデータラインを読んで。

読み取りコミット:トランザクションのみを行う企業が提出されました読むことができます。言い換えれば、前に他のトランザクションの提出に作られた会社の変更は表示されません。

反復可能読み取り:同じトランザクション複数で同じデータを読み込むの結果が同じであることを保証するために。MVCC(マルチバージョン同時実行制御)READ COMMITTEDおよび反復可能読み取りを両方分離レベルを実現します。

 

シリアル化:強制トランザクションシリアル実行。ツーフェーズロック・プロトコルに従うがシリアル化することができます。

(9)MySQLの最適化(周波数、最適化インデックス、パフォーマンスの最適化)

クエリの最適化:書き込みSQL文、あなたは別の参加]を選択することができ、それによって、二項演算子のサイズを小さく、葉を押す(選択)メタオペレーションを入れてみてください。

 

索引チューニングは:クエリ時には、インデックス列は、そうでない場合は、索引を使用できない、表現ではなく、パラメータの機能の一部にすることはできません。

照会する条件は、複数のカラムの使用を必要とするように、複数列のインデックスは、複数の個別のインデックスのパフォーマンスを使用するよりも優れています。

インデックス値の比が繰り返されることはありませんし、レコードの総数:前面に最も選択欄、選択的インデックス手段をしてみましょう。1の最大値は、それぞれの場合レコードはそれに対応する固有のインデックスを有します。選択性が高い、クエリの効率が高いです。

同様のVARCHAR型の列、あなたは接頭辞インデックスを使用する必要があり、インデックスが始まった文字の一部でしかありません。私たちは、インデックス選択したプレフィックス長の選択に基づいて決定する必要があります。


レポート、機能とのInnoDBテーブルとMyISAMの間の違いに(10)データベースエンジン。

InnoDBは:InnoDBはデフォルトでは、他のストレージエンジンの使用を検討する前に、サポートされていない機能を必要なときにのみInnoDBは、トランザクションストレージエンジンをMySQLのです。実装4つの標準分離レベル、デフォルトのレベルは反復可能読み取りです。マルチバージョン同時実行制御によって分離レベル反復可能読み取り(MVCC)+ギャップロック(ネクストキーロック)にゴースト読み取りを防止します。メインインデックスは、クラスタ化インデックス、これ直読ディスクを避け、インデックスに格納されたデータなので、クエリのパフォーマンスに改善の余地があります。データの使用を含む内部の最適化の多くは、読み取り操作を高速化することが可能になると自動的に適応ハッシュインデックスを作成し、予測可能性を読み取るためにディスクから読み取るか、バッファは、加速器などの挿入操作に挿入することができます。

MYISAM:MyISAMテーブルは、圧縮テーブル、インデックス、および他の空間データを含む多数の特徴を提供します。これは、トランザクションをサポートしていません。読書は、テーブルプラス排他ロックを書いて、テーブルの上にすべての共有ロックを読み取る必要があるでしょうしながら、それは、唯一のテーブル全体にロックすることができ、行レベルのロックをサポートしていません。テーブルは、読み出し動作を有しているが、新規レコードがテーブルに挿入することができ、これは同時に挿入と呼ばれます。

比較します

サービス:InnoDBはあなたがコミットやロールバックのステートメントを使用することができ、トランザクションです。

並行性:のMyISAMサポートのみテーブルレベルロック、およびInnoDBは、行レベルのロックをサポートします。

外部キー:InnoDBは外部キーをサポートしています。

クラッシュリカバリ:クラッシュ後に発生する損傷の確率はMyISAMテーブルはInnoDBよりもはるかに高く、回復の速度も遅くなります。

バックアップ:オンラインのInnoDBホットバックアップをサポート。

その他の機能:データ圧縮テーブルとインデックススペースのためのMyISAMサポート。

 

11 データベース接続プールの役割

どのようなデータベース接続プールです:データベース接続を作成することは、データベースに脅威を与える可能性があり、非常に時間のかかる作業です。そのため、プログラムの初期化中に、一元複数のデータベース接続を作成し、プログラムの使用のために彼らの集中管理、あなたはより速く、データベースの読み取りと書き込み速度を確保することができ、また、より安全。データベース接続プールは、アプリケーションが既存のデータベース接続を再利用するのではなく、1を再作成することを可能にするデータベース接続の配布、管理、およびリリース、担当しています。接続プーリングは、特定の時間内に一つのスレッドに割り当てることでCONNを確認する必要があります。コネティカット異なるトランザクションは、互いに独立しています。

 

データベース接続プロセスにアクセスするための伝統的なメカニズムへのJavaアプリケーション:①負荷データベースドライバを、②データベース接続がJDBCを介して確立されます。③データベースへのアクセス、SQL文の実行、④データベースからの切断。

データベース接続プールのメカニズムを使用します。①接続プールの初期化プロシージャを作成します。②使用用途③使用後の接続プールに使用可能な接続は、接続をプールに戻します。④プログラムの終了時に、すべての接続を切断し、リソースを解放。

 

mutexロックとリーダーに加えて、あなたが使用されているすべてのロックについて(12)の話、スピンロック、ロック再帰、楽観的ロック、悲観的ロックなど

1.共有ロック(も読み込みロックとして知られている)(また、書き込みロックとして知られている)、排他ロック:

InnoDBエンジンロック機構:InnoDBは、トランザクションをサポートするサポート行とテーブルロックが、より多く使用されるMyISAMテーブルは、トランザクションをサポートしていない唯一の表ロックをサポートしています。

 共有ロック(S):トランザクションが排他ロックを設定し、同じデータを取得するために他のトランザクションを防ぐために、行を読み取ることができます。

排他ロック(X):彼は排他的ロックトランザクションの更新データを取得できるようにするため、他のトランザクションを阻止するには、同じデータセットを共有するために作られたロックと排他的な書き込みロックをお読みください。

意図共有ロックは、(IS):トランザクションはロックがテーブルの上にロックIS取得する必要があり、共有データ線にトランザクションの前にロックを共有データ行の行を追加していきます。

意図排他ロック(IX):権利は、データライン行排他ロックに追加していき、トランザクションがデータ行の行を追加して、テーブルの上に彼のロックIXロック前に取得する必要があります。

2.楽観的ロック、悲観的ロック:

悲観的ロック:悲観的ロックは、その名前が示唆するように、それは、従って、全体のデータ処理プロセスを保守的なアプローチを変更する(外部システムからシステムの他の時事を含む、およびトランザクション処理)部外によってデータを参照し、データはロックされています。悲観的ロックを実装し、多くの場合、データベース(データベース層が提供するロック機構を頼って、するために提供される唯一のロックメカニズムは、本当に、そうでない場合は、データへの排他的アクセスを確保するためにも、このシステムにロック機構を実現するために、外部のシステムを変更しない保証はありませんデータ)

オプティミスティック・ロック:

オプティミスティック・ロック(オプティミスティック・ロック)比較的悲観的ロック、ロックは通常の状況下で、データの衝突原因なので、時間がないだろうという楽観的な仮定は、正式な紛争前に更新提出するか、データは、データ内で検出されていない競合が見つかった場合、その後、ユーザーが(何をすべきかを決定することができ、ユーザーはエラーメッセージを返すせ、通常はトランザクションをロールバック)。だから、どのように我々は、一般的な次の2つの方法で楽観的ロック、それを達成します:

 (13)二相ロック・プロトコル

ロック・アンロックは、二つの段階に分けられます。ツーフェーズロック・プロトコルに従う業務は、スケジューリングのための十分条件はシリアル化できることを確認することです。

、並行性制御を介して、スケジューリング手段をシリアル化することができる(完全非必須、シリアライゼーションに従うことができなかった、また、直列化を確実にするために従わなければならない)ので、同時にシリアルトランザクション実行と同じ結果との取引の実行結果。

(14)リレーショナルおよび非リレーショナルデータベース(それぞれの長所)との差

 (15)パラダイムデータベース

リレーション(テーブル)のパラダイムを満たしていない、それが異常を解決するために異常なパラダイム論の多くを生成します。一般的な冗長データの異常、異常な変更は、異常、異常挿入を削除します。高レベルのパラダイムは、低レベルのパラダイムに依存している、1NFはパラダイムの最低レベルです。

1NF:プロパティ切っても切れない。1NFが有効なテーブルではありません満たしていません。

2NF:各非プライマリキー属性は、機能コードに完全に依存しています。2NFを満たしていない例外の4種類が発生することがあります。これは、分解テーブルによって満たすことができます。

3NF:非プライマリプロパティは、キーコードの伝達関数に依存しません。3NFは、例外の上記4種類が発生することが満たしていません。これは、分解テーブルによって満たすことができます。

 

二相ロック・プロトコル

ロック・アンロックは、二つの段階に分けられます。ツーフェーズロック・プロトコルに従う業務は、スケジューリングのための十分条件はシリアル化できることを確認することです。

(完全に非必須、また、シリアライズをたどることができませんでした、直列性を確保するために従わなければなりません)

 

シリアライズスケジューリング手段と、同時実行制御により、その結果、トランザクションが同時にシリアル実行と同じ結果を実行すると、トランザクションの結果。


 MySQLのテーブルスペースの種類、自分の特性。

InnoDBのエンジンMySQLのテーブルスペースので、排他的な表領域2のデータストレージを共有する必要があります。

 

表スペースの共有すべてのテーブルのデータを、データベースへのインデックスデータが表スペースを共有しました。表スペースに格納されたテーブルとインデックス複数の混合。

利点:複数のファイルへの表スペースは、各ディスク上に格納するテーブルが同期されていないファイルに分散することができます。

表スペースは、各ディスクに保存されている複数のファイルに分割することができ、そのテーブルはディスク上に格納された複数のファイルに分割、テーブルの無制限のファイルサイズは、ディスクのサイズになります。一緒に、データやファイルの管理を容易にします。

短所:ロットテーブル削除操作が表スペースの空隙の多くを持つことになりますと、テーブルとインデックススペースに保存されたテーブルを複数の混合。共有テーブルスペースが縮小することはありません。

 

別の表スペース:各テーブルには、独自の個別のテーブルスペースがあります。各テーブルとインデックスのデータは、独自の表領域に存在しています。

他の情報は、このようなロールバック(元に戻す)の情報として、デフォルトの表スペース内に依然としてあります。デフォルトの表スペースは、スペースを縮小することはありません。

長所:単一のテーブルは、異なるデータベースの動きで実現することができます。表スペース、表スペースデブリがあまりにも深刻なパフォーマンスへの影響はありません削除どんなに、だけでなく、対処する機会のために別のテーブルを使用してください。別の表スペースのサイズが縮小することができます。

短所:単一のテーブルは、100以上のG.として、大きくなりすぎています

概要:比較では、排他テーブルスペース効率とパフォーマンスの使用が少し高くなります。共有および排他表スペースtablespace間の変換は、コンフィギュレーションファイルもしinnodb_file_per_tableでパラメータを設定することによって行うことができます。説明OFFが排他的に表領域を使用されています。


(18)分散トランザクション

別の小さな操作の組成物による主要な操作は、これらの小さな操作が異なるサーバーに分散し、異なるアプリケーションに属し、分散トランザクションは、これらの小さな操作はどちらかすべて成功するか、すべて失敗していることを確認する必要があります。本質的には、分散トランザクションは、異なるデータベースからのデータの一貫性を確保することです。

(21)ビュー(削除するか、など)の役割と使用

ビューは、仮想テーブル、通常のテーブルと同様の操作のビューの動作です。しかし、ビュー自体にデータが含まれていない、それがインデックス付きの操作をすることはできません。ビューは、以下の利点を有する:ユーザーへのアクセス権ビューをデータのセキュリティを確保するために、を介して、2つの簡素化複雑なSQL操作の複雑な接続; 3は、データ形式と表現を変更; 4、実際のテーブル....データの一部。

VIEW MYVIEW ASのCREATE

compute_col AS SELECT連結方式のconcat_col AS(COL1、COL2)、col3という* COL4

mytableはFROM

WHERE COL5 =ヴァル;

概要:データは、テーブルビュー、選択クエリのパッケージに含まれていません。データ処理は、データベース再フォーマットし、簡略化することができます。

(22)サブライブラリーサブテーブルは、読み取りと書き込み、マスターコピーから分離します。(私は、全体で来ていないではないでしょう)

サブライブラリーサブテーブル:

レベルセグメンテーション:も知らシャーディング、同じコンフィギュレーションテーブルの複数の同一のテーブルに分割レコードです。データテーブルが増加したとき、シャーディングは、データがクラスタの異なるノードに分散されてもよい不可避な選択であるので、単一のデータベースキャッシュの圧力こと。サービス:業務上の問題を解決するために、分散トランザクションを使用しました。JOIN:元のクエリはJOINに、ユーザ・プログラム、単一テーブルのクエリを複数に分解することができるJOIN。

 

どのようなデータ構造は、memcacheの中に実装されています

メモリキャッシュは、メモリ内にオブジェクトがデータベースから読み出され、動的データベース駆動型サイトの速度を向上させるためにキャッシュデータの数を低減することであるキャッシュサーバを分散しました。Memcacheのはmemcacheのデータに保存された内蔵メモリの収納スペースに格納されています。再起動memcacheのは、オペレーティングシステムは、すべてのデータの消失につながります。コンテンツmemcacheの容量はLRUアルゴリズムmemcacheの4に基づいて指定された値に達すると、キャッシュを排除します。memcacheのキャッシュサーバ自体は、永久的な問題を検討するので、あまりいないデータを設計されています。

memcacheのは、内部データ保存の原則をRedisの

https://blog.csdn.net/session_time/article/details/52618215

memcachedのとRedisのように、効率性を確保するために、データはメモリにキャッシュされています。Redisの差はそれが定期的にディスクに書き込まれたデータを更新するか、追加のログファイルを書き込む動作を変更するために、そしてこれに基づいてマスタースレーブ(マスタとスレーブ)の同期を実現しています。


プロジェクトは、データベースを使用しています(23)、どのように使用します

おすすめ

転載: www.cnblogs.com/springwind2006/p/12093007.html