私もこれについて詳しく説明してきましたが、私はこの件については断然参考にしていますが、収集した重要な事実と共有したいポイントはほとんどありません。
パーティションは、別個の独立した部分に論理データベース又はその構成要素の一部門です。データベースのパーティション化は、通常、ロードバランシングと同様に、管理性、パフォーマンス、または可用性の理由から行われます。
https://en.wikipedia.org/wiki/Partition_(database)
シャーディングは、水平分割(HP)などの分割の一種です。
また、垂直分割(VP)があり、テーブルを小さな個別の部分に分割します。正規化にはテーブル間の列の分割も含まれますが、垂直分割はそれを超えており、すでに正規化されている場合でも列を分割します。
https://en.wikipedia.org/wiki/Shard_(database_architecture)
私は、QuoraでTony Bacoが(列や行ではなく)スキーマの観点から考えさせる答えを本当に気に入っています。彼はこう述べています...
「水平分割」またはシャーディングとは、スキーマを複製[コピー]し、シャードキーに基づいてデータを分割することです。
「垂直分割」はスキーマを分割することを含みます(そしてデータはライドに沿って行きます)。
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
Oracleのデータベースパーティショニングガイドには、いくつかのすばらしい数値があります。記事の抜粋をいくつかコピーしました。
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
いつテーブルを分割するか
次に、テーブルをパーティション分割するタイミングに関するいくつかの提案を示します。
- 2 GBを超えるテーブルは、常にパーティション分割の候補と見なす必要があります。
- 新しいデータが最新のパーティションに追加される履歴データを含むテーブル。典型的な例は、当月のデータのみが更新可能で、残りの11か月は読み取り専用である履歴テーブルです。
- テーブルの内容をさまざまなタイプのストレージデバイスに分散する必要がある場合。
パーティションプルーニング
パーティション・プルーニングは、パーティショニングを使用してパフォーマンスを改善するための最も単純で最も重要な手段です。パーティションのプルーニングにより、クエリのパフォーマンスが数桁向上することがよくあります。たとえば、アプリケーションに注文の履歴レコードを含むOrdersテーブルがあり、このテーブルが週ごとに分割されているとします。1週間の注文を要求するクエリは、Ordersテーブルの1つのパーティションにのみアクセスします。Ordersテーブルに2年間の履歴データがある場合、このクエリは104パーティションではなく1パーティションにアクセスします。このクエリは、パーティションのプルーニングが原因で、100倍速く実行される可能性があります。
パーティショニング戦略
あなたは彼らのテキストを読み、すべてをかなりよく説明する彼らのイメージを視覚化することができます。
最後に、データベースは非常に多くのリソースを消費することを理解することが重要です。
多くのDBAは同じマシンでパーティションを作成し、パーティションはすべてのリソースを共有しますが、データやインデックスを分割することにより、ディスクとI / Oを改善します。
他の戦略では、CPU、ディスク、I / O、およびメモリを100%持つシャードが別々の異なるコンピューティングユニット(ノード)に存在する「シェアードナッシング」アーキテクチャを採用します。独自の利点と複雑さのセットを提供します。
https://en.wikipedia.org/wiki/Shared_nothing_architecture