web-dev-qa-db-ja.com

リレーショナルデータベースを水平方向に拡張できます

いくつかグーグルした後、私は見つけました:

mysql docs からのメモ:

MySQL Clusterはノード間でテーブル(パーティション)を自動的にシャーディングし、データベースを低コストのコモディティハードウェアで水平方向にスケーリングして、SQLから、およびNoSQL APIを介して直接アクセスされる読み取りと書き込みの集中的なワークロードに対応できるようにします。

リレーショナルデータベースは水平スケーリングできますか?それはどういうわけかNoSQLデータベースに基づいていますか?

誰かが実際の例を持っていますか?

そのようなデータベースでSQL要求、トランザクションなどをどのように管理できますか?

20
Maksym

正解は、確かにそうです。 SQLは単なるデータアクセス言語であることを覚えておく必要があります。複数のコンピューターやネットワークパーティションに拡張できない理由はまったくありません。難しい問題ですか?最も確かに、そしてそれがそれを行うソフトウェアがその初期段階にある理由です。

さて、あなたが尋ねようとしているのは、「私がよく知っていて、標準のSQLタイプのリレーショナルデータベース管理システムに組み込まれているすべての機能を、この方法で複数のサーバーと連携するように開発できるか」ということです。私は問題を徹底的に研究していないことを認めますが、「いいえ、それはできません」と言う定理がそこにあります。 Consistency-Availability-Partition Theorem 3つの品質すべてを同じレベルにすることはできないと仮定します。

さて、すべての実用的な目的のために、「シャーディング」や「パーティション化」など、呼びたいものは何もなくなることはありません。それとは反対に。これは、CAPの定理が満たす程度を考えると、データベースについての考え方と、データベースとの対話方法(少なくともある程度)を変える必要があることを意味します。多くの開発者は、No-SQLプラットフォームで成功するために必要なシフトをすでに行っていますが、多くの開発者はそうではありません。最終的に、モデルの十分な成熟度と効果的な十分な回避策が開発され、従来のSQLデータベースは、参照する意味で、複数のマシン間で多かれ少なかれ実用的になります。これはすでに十分に機能し始めており、もう数年先のことと思います。または、私たちは集合的に思考をもはや必要のないところまでシフトし、世界はより良い場所になるでしょう。 :)

12
theMayer

可能ですが、多くのメンテナンス作業が必要です説明-

データの垂直スケーリング(SQLデータベースの正規化と同義)は、スペースの冗長性を減らすために、データ列を複数のテーブルに分割することと呼ばれます。ユーザーテーブルの例-

enter image description here

データの水平スケーリング(シャーディングと同義)は、データのフェッチにかかる時間を短縮するために、行を複数のテーブルに分割することと呼ばれます。ユーザーテーブルの例-

enter image description here

SQLデータベースのテーブルが関連データの複数のテーブルに正規化されていることがわかるように、ここで注意すべき重要な点はです。複数のマシンでそのようなテーブルのデータをシャーディングするには、関連する正規化されたデータをそれに応じてシャーディングする必要があります。これにより、メンテナンス作業が増加します。上記のSQLデータベースの例のように、

Orderテーブルと1対多の関係として関連付けられているCustomerテーブル

顧客データの一部の行を他のマシンに移動する場合(シャーディングと呼ばれます)、関連する注文データを同じマシンに移動する必要があります。これは、複数の関連テーブルがある場合に面倒な作業になります。

NOSQLデータベースがフラットテーブル構造に従ってデータを分割するのに便利です(データは正規化された形式ではなく、集約された形式で格納されます)。

7
Keshav

質問と回答をありがとう。私はこれをこのような誰かに説明しようとしていました:

CAPの定理に関しては、3つすべてを持つことはできません。したがって、パーティション(ネットワークまたはサーバーの障害)が発生すると、次のようになります。

  • relational database単一のサーバーでC(一貫性)を提供しています。したがって、P(パーティション-サーバー/ネットワークの障害)が発生した場合、A(可用性-dbがダウンする)は発生しません。

  • nosql datastoreAを提供するため、Pが発生した場合、Cを使用することはできません(1つ以上の複製されたパーティションは、n/wが戻ってきて、すべて同期します)。したがって、それはeventually consistent

6
code4kix

Google Spannerは、水平方向に拡張できるリレーショナルデータベースの例です。シャーディングとレプリケーションは自動的に行われるため、そのことを心配する必要はありません。詳細については、こちら paper をご覧ください。

0
Darkov