web-dev-qa-db-ja.com

データが「自然に分割可能」である場合に、マシン間でPostgreSQLを分割する最新の方法は何ですか

「NoSQL」の分野に数年間住み続けた後、今、私は本質的に非常に「リレーショナル」な問題を抱えています。今日、私は以前とはまったく異なる視点でデータストアを目にしています。 Riakのようなものは、単一の障害点、「メンテナンスのためのダウン」などに耐えられなくなるような方法で私を台無しにしています。これは個人的なプロジェクトであり、非常に(または)非常に高い要件はありません。

ほとんどのシャーディングソリューションでは、(少なくとも一見すると)欲しいものが得られません。おそらく、私の問題は非常に「簡単に」解決できるためです。少なくとも概念レベルでは(RDBM自体がテーブルにもたらす制約を無視して)。

  1. 少量の「共有」データがあり、自由に複製できます。ハード整合性の要件はありません。これは、ダイナモのようなデータベースに格納でき、無限に拡張されます。しかし、できれば単一のデータベースを使いたいと思っています。

  2. 「ユーザーごと」のデータがたくさんあります。つまり、多くのユーザーが絶対的に妥当なサイズのデータ​​を持っているため、単一のPostgreSQLノードに格納するのに本当に適しています。最大で数万のレコードについて話している。

  3. クロスユーザーにクエリを実行する必要はなく、クロスユーザーの原子性も必要ありません。

これは非常に簡単に実現できます。少なくとも私が「NoSQLの目」で見ているときは。

ここに私の素朴なスターターのアイデアがあります:

  1. 極端な場合、Riakでユーザー全体を単一のキー/値としてシリアル化できます。もちろん、数メガバイトのデータの継続的なデシリアライゼーションは遅くなるため、PostgreSQLの使用を検討しています。各ユーザーのデータ内で原子性/トランザクションが必要なため、Riak K/Vの多くは立ち入り禁止です。

  2. ユーザーごとにSQLiteデータベースを使用し、冗長性/可用性のためにGlusterFSなどを使用できます。これはおそらく、PostgreSQLを使用して同等に良いものが見つからない場合に選択するソリューションです。長所:スケールアップ/スケールアップは非常によくできます。短所:SQLiteよりもPostgreSQLの型と厳格さを優先する

だから、私は理想的にはPostgreSQLのシャーディングソリューションから要求するもの:

  1. すべてのユーザーのデータの複数のコピーを(異なるマシン上で)自動的に保持します。ユーザー/シャードごとにマスターノードを動的に切り替えることができます(前のマスターがダウンした場合)。
  2. サーバーノードを追加/削除することにより、動的にスケールアップ/スケールダウンできる。主にリアックができるように。
  3. アプリケーションがどのノードといつ通信するかを知る必要はありません。
22
loxs

Postgres-XL は2014年の時点でこれを解決しようとしています。彼らはPostgreSQLのビッグデータを直接目指しており、Stadoの開発者をオンボードにしています。

5
Mike Burton

最良のオプションは pgpool-II だと思います。最大128のノードと

  1. 複雑なパーティショニングとデータ分散ルールを設定することが可能です
  2. 「オンラインプロビジョニング」をサポートします。書き込みをスケーリングしませんが、読み取りスケーラブルです
  3. 確かに、できればすぐに使用できる状態です。たぶん [〜#〜] lvs [〜#〜] を使用する必要があります

別のオプションは Stado かもしれません

4
mys