web-dev-qa-db-ja.com

データベースのシャーディングとパーティション分割

最近、スケーラブルなアーキテクチャについて読んでいます。そのコンテキストでは、データベースに関して表示され続ける2つの単語はshardingpartitioningです。私は説明を調べましたが、それでも混乱してしまいました。

Stackoverflowの専門家は、基本を正しく理解するのに役立ちますか?

  • shardingpartitioningの違いは何ですか?
  • 「すべての断片化されたデータベースは本質的に(異なるノード上で)パーティション化されていますが、すべての断片化されたデータベースは必ずしも断片化されているわけではありません」
117
Amit Sharma

パーティション化は、テーブルまたはデータベース間でデータを分割するためのより一般的な用語です。シャーディングは、特定のタイプのパーティショニング、つまり水平パーティショニングです。

こちらもご覧ください: http://www.quora.com/Whats-the-difference-between-sharding-and-partition

83
Canis

これはあなたの両方の質問に答えているように見えます:

水平分割は、通常、スキーマとデータベースサーバーの単一インスタンス内で、1つ以上のテーブルを行ごとに分割します。最初にインデックスを検索する必要なく、特定の行がどのテーブルで見つかるかを特定するための明確で堅牢で暗黙的な方法がある場合、インデックスサイズ(および検索労力)を削減することで利点があります。 「CustomersEast」テーブルと「CustomersWest」テーブルの例。郵便番号はすでにどこにあるかを示しています。

シャーディングはこれを超えます。問題のあるテーブルを同じ方法でパーティション化しますが、スキーマの複数のインスタンスに分割します。明らかな利点は、同じ論理サーバー上の複数のインデックスだけでなく、大きなパーティションテーブルの検索負荷を複数のサーバー(論理または物理)に分割できることです。

ソース: Wiki-Shard

シャーディングは、複数のマシンにデータレコードを保存するプロセスであり、データ増加の要求を満たすためのMongoDBのアプローチです。データのサイズが大きくなると、単一のマシンではデータを保存したり、読み取りおよび書き込みのスループットを許容したりするのに十分ではなくなる場合があります。シャーディングは、水平スケーリングによって問題を解決します。シャーディングでは、データの増加と読み取りおよび書き込み操作の要求をサポートするマシンを追加します。

ソース: MongoDB

34
NoChance

私もこれに飛び込みましたが、私はこの問題についてははるかに参考ですが、私が収集した重要な事実と共有したいポイントはほとんどありません:

partitionは、論理データベースまたはその構成要素を別個の独立した部分に分割することです。データベースパーティション分割は、通常、負荷分散の場合と同様に、管理性、パフォーマンス、または可用性の理由で行われます。

https://en.wikipedia.org/wiki/Partition_(database)

Shardingは、Horizo​​ntal Partitioning(HP)などのパーティションの一種です

また、Vertical Partitioning(VP)があり、これによりテーブルをより小さな個別の部分に分割します。正規化には、テーブル間でのこの列の分割も含まれますが、垂直分割はそれを超え、すでに正規化されている場合でも列を分割します。

https://en.wikipedia.org/wiki/Shard_(database_architecture)

Quoraでのトニー・バコの答えが本当に好きです。彼は、列と行ではなく、スキーマの観点から考えさせます。彼は...

Horizo​​ntal 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

テーブルをパーティション分割する場合

以下に、テーブルをいつパーティション分割するかの提案を示します。

  • 2 GBを超えるテーブルは、常にパーティション分割の候補と見なす必要があります。
  • 新しいデータが最新のパーティションに追加される履歴データを含むテーブル。典型的な例は、現在の月のデータのみが更新可能で、残りの11か月は読み取り専用である履歴テーブルです。
  • テーブルの内容を異なる種類のストレージデバイスに分散する必要がある場合。

パーティションプルーニング

パーティションプルーニングは、パーティショニングを使用してパフォーマンスを向上させるための最も単純で最も重要な手段です。パーティションのプルーニングにより、クエリのパフォーマンスが数桁向上することがよくあります。たとえば、アプリケーションに注文の履歴レコードを含むOrdersテーブルが含まれており、このテーブルが週ごとにパーティション分割されているとします。 1週間の注文を要求するクエリは、Ordersテーブルの1つのパーティションにのみアクセスします。 Ordersテーブルに2年間の履歴データがある場合、このクエリは104個のパーティションではなく1つのパーティションにアクセスします。このクエリは、パーティションのプルーニングが原因で、100倍速く実行される可能性があります。

パーティショニング戦略

  • 範囲
  • ハッシュ
  • リスト

あなたは彼らのテキストを読み、すべてを非常によく説明している彼らの画像を視覚化することができます。

最後に、データベースは非常にリソースを消費することを理解することが重要です。

  • CPU
  • ディスク
  • I/O
  • 記憶

多くのDBAは同じマシン上でパーティションを作成します。パーティションはすべてのリソースを共有しますが、データやインデックスを分割することでディスクとI/Oを改善します。

他の戦略では、シャードが100%のCPU、ディスク、I/O、およびメモリを備えた別個の異なるコンピューティングユニット(ノード)に常駐する「シェアードナッシング」アーキテクチャを採用します。独自の利点と複雑さを提供します。

https://en.wikipedia.org/wiki/Shared_nothing_architecture

28
Jeach

100万行と100列のデータベース内のテーブルを考えてみましょうパーティション分割では、テーブルを次のようなプロパティを持つ2つ以上のテーブルに分割できます。

  1. 40万行(表1)、60万行(表2)

  2. 100万行60列(表1)および100万行40列(表2)

    そのような複数のケースがある可能性があります

これは一般的なパーティション分割です

しかし、Shardingは、行に基づいてデータを分割する最初のケースのみを参照します。テーブルを複数のテーブルに分割する場合、複数のテーブルがあるため、スキーマの複数の同様のコピーを維持する必要があります。

1
vikas bhandari

シャーディング特別な場合水平分割、パーティションが複数のデータベースインスタンスにまたがる場合。データベースがシャーディングされている場合、それは定義によってパーティション化されていることを意味します。

0
Pavel