ここでいくつかの用語が混同されていると思います。
すべてのデータは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です。