MySQLデータベースとトランザクションストレージエンジン

リレーショナルデータベースと非リレーショナルデータベース

 1.リレーショナルデータベース機能:

  1)データを表形式で提示されています

  名あたりの様々な記録の2)行動

  3)各列名が記録されたデータフィールドに対応します

  4)行と列の多くは形成

  5)複数のフォームデータベースから構成される

 2.リレーショナルデータベースの利点:

   2.1複雑なクエリ:あなたは非常に複雑なデータクエリを行うテーブルと、複数のテーブル間で簡単にSQL文を使用することができます。

   2.2トランザクションサポートは、高パフォーマンスのための安全なデータアクセス要件を達成することができます。

 3.非リレーショナルデータベースの利点:

   3.1パフォーマンス:NOSQLを鍵ペアに基づいており、それはテーブルの主キーと値の対応関係することが考えられる、と解析されたSQL層を必要とせず、性能が非常に高いです。

   3.2スケーラビリティ:また、鍵のペアに基づいているように、データの間には結合が存在しない、水平に拡張することが非常に容易です。

 問題:3つの従来のデータベースとの違いは?

  :3の間には、何かが、ツリー構造の階層型データベースである離れたデータとの間のリンクに基づいて、ネットワークデータベース・リンクは、ポインタ構造である2次元のリレーショナルデータベースのテーブル構造です。

第二に、トランザクション(ACID)

  トランザクション(取引)システム全体が一緒に提出するように実行される作業の単一の論理ユニットとしての一連の動作、これらの操作である、のいずれかで実行され、または実行されません。トランザクションは、作業積分の論理的な単位です。

  トランザクションは、ACID特性と呼ばれ、次の4つのプロパティを、持っている必要があります。

    アトミック(原子性):トランザクションが完了操作です。物事の各構成要素の動作は、(原子)不可分である;または実行または実行されません。

    一貫性(整合性):トランザクションが完了すると、データが一貫した状態になければなりません。

    絶縁(アイソレーション):すべての同時トランザクションがデータを変更するには、トランザクションが独立している必要があります、それはどのような方法で影響を与えたり、他のサービスに依存してはならないことを示し、互いに分離されています。

    永久(耐久性REV) トランザクションが完了すると、永久的な取引を維持するために、トランザクションログを、それが永続的であるデータベースを変更します。

  トランザクション分離レベル:

    コミットされていないコンテンツを読んで(もコミットされていない読んでダーティリードとして知られている):コミットされていないトランザクションの結果を見ることができ、他の全ての事項を指します。非反復可能読み取りとファントムが問題を読み、汚い読み込みがあるかもしれません。

    提出を読む(COMMITED読み):トランザクションは提出されていることを行うためにしっかりの変化を見ることができます。読み込み汚れを避けるため、反復不能読み取りとファントムの問題を読みがあるかもしれません。

    反復可能読み取り(反復可能読み取り):MySQLのデフォルトのトランザクション分離レベルの複数のインスタンスが、それは同時の時に同じトランザクションがデータを読み込むことを保証し、あなたは、同じデータ行が表示されます。避けダーティ・リードと非反復可能読み取り、ファントム読み取りは問題がある可能性があります。

    シリアライズファントム読み取りの問題を解決するために、互いに競合することができなくなって、データの読み出しの各行に共有ロックを添加することにより単離の最高レベル、それは:(シリアライズ)。ダーティリード避け、非反復可能読み取り、ファントム読み取り。

  同時トランザクションによって引き起こされる問題:

    1.失われた更新 2つのトランザクションT1およびT2は、同一のデータが送信結果がT2 T1結果を提出覆い、読み取りおよび変更され、変更T1における結果は失われます。

    2.ダーティ読み取り:T1が何らかの理由で取り消され、トランザクションT1は、データを変更して戻ってディスクに書き込み、トランザクションT2の後に同じデータを読み、その後、T1は、データ復旧元の値、T2の読み取りを変更されていますデータは、データは、T2すなわち「ダーティ」データ、誤ったデータが読み出され、データベース内のデータと一致しないであろう。

    3.非反復可能読み取りは:複数回、同じデータを読み取るために、トランザクション内であることを意味します。この取引が終わっていない場合は、別のトランザクションは、同じデータにアクセスします。だから、間の2が原因2番目のトランザクションの変更に、最初のトランザクションでデータを読み、その後、最初のトランザクションデータは同じではありません二度読みすることができます。これは、データがそれほど非反復可能読み取りと呼ばれ、同じではありません読みトランザクション内で二度同じクエリで起こりました。

    4.マジック読書:たとえば:5,000従業員10人の現在の給与計算、トランザクションAは、5000のすべての賃金10人の数を読み取ります。この時点で、トランザクションBは賃金として、レコード5000を挿入します。このとき、トランザクションAは11人として記録、再び5,000従業員の賃金を読み込みます。この時点で、ファントム読み取り生じます。

   非反復可能読み取りとファントムは違いを読んで?非反復読み出しフォーカスが変更され、ファントム読み出しフォーカスが追加または削除されています。

   MVCC(マルチバージョン同時実行制御メカニズム): InnoDBは達成するために、各ラインの記録の後に2つの隠し列を保存することで、MVCCです。作成時間だった時間を節約し、行(いないここで格納されている実際の時間値が、システムのバージョン番号)の行を削除。それぞれが新しいトランザクションを開始し、システムが自動的にバージョン番号をインクリメントします。システムのバージョン番号を比較している行に各クエリのトランザクションIDなどのトランザクション、およびバージョン番号の開始時間となり、使用MVCCファントムは現象を読み取る反復読出しの後分離レベルでは起こりません。

第三に、ストレージエンジン

  データベースのストレージエンジンは、基盤となるソフトウェア組織、データを、クエリ作成、更新、および削除するために、データエンジンを使用して、データベース管理システム(DBMS)です。

  1.InnoDB(クラスタ化インデックスモード)

    記憶B +ツリー構造の下にあるInnoDBは、ツリーの各ノードはInnoDBのページに対応するページのサイズは固定され、通常は16Kである。前記非リーフノードだけキー、リーフノードは完全なデータが含まれています。

    1)頻繁に更新されたテーブルが更新され、複数の同時要求の処理;:使用します

         2)サポートトランザクションセーフテーブル(ACID)、および外部キーのサポートラインロック。

         3)ビン・ログログによって回収することができます

    主キー場合InnoDBは、自動的に(ユーザに見えない)、6バイトの主キーを生成します。

  2.MyISAM(非クラスタ化インデックスモード)

    MySQLの5.1 MyISAMテーブルは、性能を重視して、デフォルトのストレージエンジンであるが、それは、トランザクションをサポートしていない、行が外部キーとロックをサポートしていない、テーブルロックをサポートする前に、あなたがデータを挿入または更新するときは、テーブル全体をロックする必要があり、効率それは低くなります。専用キャッシュ・インデックスではなく、実際のキャッシュデータ。MyISAMテーブルには、高速なデータを読み込み、メモリおよびストレージリソースの多くを取るしない場合。

    MyISAM允许没有主键的存在,是一种静态索引结构。

  问题:MySQL中MyISAM与InnoDB的区别?

   答:MySQL数据库中,最常用的两种引擎是innodb和myisam。InnoDB是目前MySQL的默认存储引擎。

     1)事务方面:MyISAM强调的是性能,查询速度比InnoDB类型更快,但是不支持事务。InnoDB提供事务支持。

     2)外键:MyISAM不支持外键,InnoDB支持外键。

     3)锁:MyISAM只支持表级锁,InnoDB支持行级锁和表级锁,默认为行级锁,行锁大幅度提高了多用户并发操作的性能。innodb比较适合于插入和更新操作比较多的情况,而myisam则适合于频繁查询的情况。另外,innodb表的行锁也不是绝对的,如果在执行一个SQL语句时,MySQL不能确定要扫描的范围,innodb同样会锁全表,例如:update table set num=1 where name like "%aaa%"。

     4)全文索引:MyISAM支持全文索引,Innodb不支持全文索引。innodb从MySQL5.6之后提供全文索引的支持。

     5)表主键:myisam允许没有主键的表存在;innodb:如果没有设定主键,就会自动生成一个6字节的主键(用户不可见)。

     6)表的具体行数:myisam:select count(*) from table,myisam只要简单的读出保存好的行数。因为myisam内置了一个计数器,count(*)时它直接从计数器中读。

               innodb:不保存表的具体行数,也就是说,执行select count(*) from table 时,innodb要扫描一遍整个表来计算有多少行。

おすすめ

転載: www.cnblogs.com/HuiH/p/11764263.html
おすすめ