MySQLパーティションテーブルの原理の詳細


MySQLパーティション表なぜパーティションと表を分割するのか
デルのデータベース・データはますます大きくなり、単一のテーブルにデータが多すぎてクエリーの速度が遅くなり、テーブルのロックメカニズムによってアプリケーション・オペレーションにも深刻な影響を及ぼし、データベース・パフォーマンスのボトルネックが発生します.
MySQLには、データの整合性を確保するためにテーブルロックとローロックのメカニズムがあります.テーブルのロックは、このテーブルを操作できないことを示しています.私がテーブルを操作するのを待たなければなりません.行ロックも同様で、他のsqlは私がこのデータを操作し終わってから、このデータを操作することができます.しかし、このような場合、テーブルまたはパーティションを考慮することができます.
1、分表とは何か分表分表とは、1つの大きな表を一定の規則に従って複数の独立した記憶空間を持つ実体表に分解し、各表は3つのファイル、MYDデータファイル、MYIインデックスファイル、frm表構造ファイルに対応する.これらのテーブルは、同じディスクに分散したり、異なるマシンに分散したりすることができます.アプリの読み書きは、あらかじめ定義されたルールに従って対応するテーブル名を取得し、操作します.単一のデータベーステーブルで分割し、複数のデータテーブルに分割し、ユーザーがアクセスする際に、一定のアルゴリズム(hashアルゴリズムでも余(型取り)でもよい)に基づいて、ユーザーに異なるテーブルにアクセスさせることで、複数のデータテーブルにデータを分散させ、単一のテーブルのアクセス圧力を低減し、データベースのアクセス性能を向上させる.表分けの目的は、データベースの負担を減らし、クエリー時間を短縮することです.
MySQL             
                 ,               。
                    :
                      。
         text,blob(binary large object,      )             
                      :
                                 ,        join      。
                 ,               。
           
             ,    hash,            。
              400W    users,         ,          user1,user2,user3,user4
          ID                id%4=[0,1,2,3]
            ,  ,              
                     ,            ;
               ,               。             ,                      ,        。

       
    1、mysql  
              ,             。             ,            。        ,       。          。
    2、                   ,        
               ( hash   ,       (  )   )         。
    3、  merge          
        merge  ,       ,         ,        ,            。
                       ,                 。

2、パーティションとはパーティションパーティションとサブテーブルが似ているもので、ルールに従ってテーブルを分解します.異なるのは、大きなテーブルを分割していくつかの独立したエンティティテーブルを分解するのとは異なり、パーティションはデータセグメントを複数の場所に分割して保存し、パーティション化した後もテーブルは1枚のテーブルですが、データは複数の場所にハッシュされます.appの読み書き時に操作するのはやはりテーブル名で、dbは自動的にパーティションのデータを組織します.
         ;
        :                ,                    ,            。

        :                              ,       ,         ,                 。

MySQLのパーティションタイプ1、RANGEパーティションは、所定の連続区間に属するカラム値に基づいて、複数行をパーティションに割り当てる.これらの区間は連続的で重複しないようにvalues less thanオペレータを使用して定義します.2.LISTパーティションはRANGEによるパーティションと類似しており、LISTパーティションは、カラム値に基づいて離散値セットのいずれかの値を一致させることによって選択される.LISTパーティションは、「PARTITION BY LIST」(expr)を使用して実装されます.ここで、exprはカラム値またはカラム値に基づいて整数値を返す式であり、VALESIN(value_list)」を使用してパーティションを定義します.ここで、「value-list」「コンマで区切られた整数のリストです.3、Hashパーティションというモードでは、DBAはテーブルの1つ以上の列のHash Keyを計算し、最後にこのHashコードの異なる数値に対応するデータ領域をパーティション化することができます.hashパーティションの目的は、予め定義された各パーティションにデータを均一にステップ化し、各パーティションのデータ量がほぼ一致することを保証することです.RANGEおよびLISTパーティションでは、指定されたカラム値またはカラム値のセットがどのパーティションに保存されるべきかを明確に指定する必要があります.一方、RANGEとLISTパーティションではMySQLが自動的にこの動作を完了し、ユーザーがカラム値または式を決定し、パーティション化されるテーブルが分割される成分領域の数を指定します.4、KeyパーティションKeyパーティションはHashと似ていますが、hashパーティションはユーザー定義関数でパーティション化され、Keyパーティションはmysqlデータベースから提供されたパーティションでパーティション化され、NDB clustはMD 5関数でパーティション化され、他のストレージエンジンmysqlには内部のhash関数が使用されます.
         ,        ×××,    ×××,             。

5、columns   
    mysql5.5    COLUMNS  ,   RANGE LIST     ,COLUMNS        ×××      。COLUMNS          。
          ×××, INT SMALLINT TINYINT BIGINT。FLOAT DECIMAL    。
            , DATE DATETIME。         。
             , CHAR,VARCHAR,BINARY, VARBINSRY。BOLB TEXT     。
        COLUMNS           。

MySQLの分表とパーティションにはどんな違いがありますか1、実現方式上の1、mysqlの分表は本当の意味での分表で、1枚の表が多くの表に分かれた後、すべての小さな表はすべて完全な1枚の表で、すべて3つのファイルに対応して、1つはMYDデータファイルで、MYIインデックスファイルで、frm表の構造ファイル2、パーティションが異なり、1枚の大きな表がパーティション化した後、彼はまだ1枚の表で、2枚のテーブルにはなりませんが、データを格納するブロックが多くなりました.2、データの上で1、分表の后で、データはすべて分表の中に保管して、総表はただ1つのケースで、データを保管して1つの分表の中で発生します.2、パーティションは、分割テーブルの概念は存在しません.パーティションはデータを格納するファイルを多くの小さなブロックに分けただけです.パーティション化されたテーブルは、まだ1枚のテーブルで、データ処理は自分で完了しています.3、性能向上上1、分表後、単表の同時能力が向上し、ディスクIO性能が向上した.なぜ同時性が向上したのか、クエリーにかかる時間が短くなったため、高同時性の花が現れると、総テーブルは異なるクエリーに基づいて、同時性の圧力を異なる小さなテーブルに分けることができます.2、mysqlはパーティションの概念を提出して、主にディスクのIOボトルネックを突破して、ディスクの読み書き能力を高めて、ディスクの読み書き能力を高めてmysqlの性能を増加したいです.この点、パーティションとサブテーブルの側面の重点は異なり、サブテーブルの重点はデータへのアクセス時にmysqlの同時能力をどのように向上させるかであり、パーティションはディスクの読み書き能力を突破し、mysqlの性能を向上させる目的を達成することである.4、難易度1、分表を実現する方法はいろいろありますが、mergeで分表するのが一番簡単な方法です.この方式はパーティションの難易度とあまり差がなく,プログラムコードにとって透明である.他の分表方式であればパーティションより面倒です.2、パーティション実装は比較的簡単で、パーティションテーブルを構築することは、通常のテーブルを構築することと変わらず、オープンコード側にとって透明である.mysql分表とパーティションはどんなつながりがありますか1、すべてmysqlの性能を高めて、高い同時の状態の下ですべて良好な表現があります2、分表とパーティションは矛盾していませんて、互いに協力することができて、あれらの大きいアクセス量に対して、しかも表のデータの比較的に多い表.私たちはパーティション化の方法を取ることができて、アクセス量は大きくありませんが、テーブルのデータが多いテーブル、パーティション化の方法などを取ることができます.3、分表技術は面倒で、手動でサブテーブルを作成する必要があり、appサービス側が読み書きするときはサブテーブル名を計算する必要がある.mergeを使用するのは良いですが、サブテーブルと構成サブテーブル間のunion関係も作成します.4、テーブルパーティションは分表に相当し、操作が便利で、サブテーブルを作成する必要がない.