最近、スケーラブルなアーキテクチャについて読んでいます。そのコンテキストでは、データベースに関して表示され続ける2つの単語はshardingとpartitioningです。私は説明を調べましたが、それでも混乱してしまいました。
Stackoverflowの専門家は、基本を正しく理解するのに役立ちますか?
パーティション化は、テーブルまたはデータベース間でデータを分割するためのより一般的な用語です。シャーディングは、特定のタイプのパーティショニング、つまり水平パーティショニングです。
こちらもご覧ください: http://www.quora.com/Whats-the-difference-between-sharding-and-partition
これはあなたの両方の質問に答えているように見えます:
水平分割は、通常、スキーマとデータベースサーバーの単一インスタンス内で、1つ以上のテーブルを行ごとに分割します。最初にインデックスを検索する必要なく、特定の行がどのテーブルで見つかるかを特定するための明確で堅牢で暗黙的な方法がある場合、インデックスサイズ(および検索労力)を削減することで利点があります。 「CustomersEast」テーブルと「CustomersWest」テーブルの例。郵便番号はすでにどこにあるかを示しています。
シャーディングはこれを超えます。問題のあるテーブルを同じ方法でパーティション化しますが、スキーマの複数のインスタンスに分割します。明らかな利点は、同じ論理サーバー上の複数のインデックスだけでなく、大きなパーティションテーブルの検索負荷を複数のサーバー(論理または物理)に分割できることです。
ソース: Wiki-Shard 。
シャーディングは、複数のマシンにデータレコードを保存するプロセスであり、データ増加の要求を満たすためのMongoDBのアプローチです。データのサイズが大きくなると、単一のマシンではデータを保存したり、読み取りおよび書き込みのスループットを許容したりするのに十分ではなくなる場合があります。シャーディングは、水平スケーリングによって問題を解決します。シャーディングでは、データの増加と読み取りおよび書き込み操作の要求をサポートするマシンを追加します。
ソース: MongoDB 。
私もこれに飛び込みましたが、私はこの問題についてははるかに参考ですが、私が収集した重要な事実と共有したいポイントはほとんどありません:
partitionは、論理データベースまたはその構成要素を別個の独立した部分に分割することです。データベースパーティション分割は、通常、負荷分散の場合と同様に、管理性、パフォーマンス、または可用性の理由で行われます。
https://en.wikipedia.org/wiki/Partition_(database)
Shardingは、Horizontal Partitioning(HP)などのパーティションの一種です
また、Vertical Partitioning(VP)があり、これによりテーブルをより小さな個別の部分に分割します。正規化には、テーブル間でのこの列の分割も含まれますが、垂直分割はそれを超え、すでに正規化されている場合でも列を分割します。
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Quoraでのトニー・バコの答えが本当に好きです。彼は、列と行ではなく、スキーマの観点から考えさせます。彼は...
「Horizontal Partitioning」、つまりシャーディングは、スキーマを複製[コピー]し、シャードキーに基づいてデータを分割します。
「Vertical partitioning」には、スキーマの分割が含まれます(そして、データはライドに沿って進みます)。
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
OracleのDatabase Partitioning Guideには素敵な数字があります。私は記事からいくつかの抜粋をコピーしました。
https://docs.Oracle.com/cd/B28359_01/server.111/b32024/partition.htm
テーブルをパーティション分割する場合
以下に、テーブルをいつパーティション分割するかの提案を示します。
パーティションプルーニング
パーティションプルーニングは、パーティショニングを使用してパフォーマンスを向上させるための最も単純で最も重要な手段です。パーティションのプルーニングにより、クエリのパフォーマンスが数桁向上することがよくあります。たとえば、アプリケーションに注文の履歴レコードを含むOrdersテーブルが含まれており、このテーブルが週ごとにパーティション分割されているとします。 1週間の注文を要求するクエリは、Ordersテーブルの1つのパーティションにのみアクセスします。 Ordersテーブルに2年間の履歴データがある場合、このクエリは104個のパーティションではなく1つのパーティションにアクセスします。このクエリは、パーティションのプルーニングが原因で、100倍速く実行される可能性があります。
パーティショニング戦略
あなたは彼らのテキストを読み、すべてを非常によく説明している彼らの画像を視覚化することができます。
最後に、データベースは非常にリソースを消費することを理解することが重要です。
多くのDBAは同じマシン上でパーティションを作成します。パーティションはすべてのリソースを共有しますが、データやインデックスを分割することでディスクとI/Oを改善します。
他の戦略では、シャードが100%のCPU、ディスク、I/O、およびメモリを備えた別個の異なるコンピューティングユニット(ノード)に常駐する「シェアードナッシング」アーキテクチャを採用します。独自の利点と複雑さを提供します。
100万行と100列のデータベース内のテーブルを考えてみましょうパーティション分割では、テーブルを次のようなプロパティを持つ2つ以上のテーブルに分割できます。
40万行(表1)、60万行(表2)
100万行60列(表1)および100万行40列(表2)
そのような複数のケースがある可能性があります
これは一般的なパーティション分割です
しかし、Shardingは、行に基づいてデータを分割する最初のケースのみを参照します。テーブルを複数のテーブルに分割する場合、複数のテーブルがあるため、スキーマの複数の同様のコピーを維持する必要があります。
シャーディング特別な場合水平分割、パーティションが複数のデータベースインスタンスにまたがる場合。データベースがシャーディングされている場合、それは定義によってパーティション化されていることを意味します。