sql >> データベース >  >> RDS >> Mysql

なぜmysqlテーブルを多くの小さなテーブルに分割するのですか?

    ここでいくつかの用語が混同されていると思います。

    すべてのデータは1つのデータベース(別名スキーマ)に入れられます。データベースにはテーブルを含めることができます。

    例:

    table employee
       id integer
       name varchar
       address varchar
       country varchar
    
    table office
       id integer
       employee_id integer
       address varchar
    

    テーブル内にはフィールド(id, name, address)があります 別名列。テーブルには1つ以上の行があります。
    テーブル従業員の例:

    id  name        address           country
    ----------------------------------------------------
    1   John        1 Regent Street   UK
    2   James       24 Jump Street    China
    3   Darth Vader 1 Death Star      Bestine, Tatooine
    

    基本についてはこれだけです。

    パーティショニングを行う理由
    ここで、データベースにたくさんの人(行)があるとします。
    これは銀河系のデータベースなので、1,000億件のレコードがあります。
    これほど速く検索したい場合これを並行して実行できると便利です。
    したがって、テーブルを(たとえば国ごとに)パーティション化すると、x台のサーバーがそれぞれ1つの国を検索できるようになります。
    サーバー間でのパーティション化はsharding

    または、パーティション化することもできます。年ごとの履歴データなので、すべてを確認する必要はありません。 最近を取得するためのデータ ニュース。今年はパーティションを通過するだけです。これはpartitioningと呼ばれます 。

    shardingの大きな違いは何ですか ただpartitioningできます ?

    シャーディング
    sharding すべて あなたのデータは関連性があり、同様に照会される可能性があります。 (たとえば、Googleはすべてのデータがクエリされることを期待できます。データの一部をアーカイブすることは、彼らにとって役に立たないです)。
    この場合、多くのマシンがデータを並行して調べ、各マシンがその一部を実行するようにします。
    したがって、各マシンにデータの異なるパーティション(シャード)を与え、すべてのマシンに同じクエリを与えます。結果が出たらUNION それらをすべて一緒に実行し、結果を出力します。

    基本的なパーティショニング
    基本的なpartitioning データの一部がhot 一部はnot 。典型的なケースは履歴データであり、新しいデータはhot 、古いデータはほとんど変更されません。
    このユースケースでは、古いデータを別々のサーバーに配置することは無意味です。これらのマシンは、年に1回データを確認する一部の監査人を除いて、古いデータを気にする人がいないため、待機して何もしません。
    したがって、そのデータを年ごとにパーティション化すると、サーバーが古いパーティションを自動的にアーカイブするため、クエリは1年(おそらく2年)のデータのみを調べ、はるかに高速になります。

    パーティション分割が必要ですか?
    パーティション化を行うのは、セットアップが複雑になるため、データが大量にある場合のみです。
    100万を超えるレコードがない限り、パーティション化を検討する必要はありません。
    1億を超えるレコードがある場合は、必ず検討する必要があります。

    詳細については、http://dev.mysql.com/を参照してください。 doc / refman / 5.1 / en / partitioning.html
    および: http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
    wikiも参照してください: http://en.wikipedia.org/wiki / Partition_%28database%29

    これらは私の個人的なヒューリスティックYMMVです。



    1. 1つの列の値に基づいて重複する行を削除します

    2. PostgreSQLをリモートで管理するためのヒント

    3. 語幹を含むMySQL全文

    4. MariaDBの日付から曜日名を取得する3つの方法