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


22

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

おそらく、私の問題は解決が非常に「簡単」だからです。少なくとも概念レベルでは(RDBM自体がテーブルにもたらす制約を無視して)。

  1. 少量の「共有」データがあり、自由に複製できます。ハード一貫性の要件はありません。これはダイナモのようなデータベースに保存でき、無限に拡張できます。ただし、可能であれば、単一のデータベースを使用したいと考えています。

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

  3. クロスユーザーに問い合わせる必要はなく、クロスユーザーの原子性は必要ありません。

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

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

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

  2. ユーザーごとにSQLiteデータベースを使用し、GlusterFSのようなものを使用して冗長性と可用性を実現できます。これはおそらく、PostgreSQLを使用しても同様に良いものが見つからない場合に選択するソリューションです。長所:本当にうまくスケールダウン/スケールアップできます; 短所:SQLiteよりもPostgreSQLの型と厳格さを好む

したがって、PostgreSQLシャーディングソリューションから私が理想的に要求するものは次のとおりです。

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

やあ、ロックス、どうやってこの問題を解決したの?
ディクラ14

複数のデータストアによるアプリケーションレベルのパーティション分割。かなりの混乱が実際:(このようなものが存在しないことを本当に悲しい...。
loxs

回答:



4

私が思うに、最良のオプションはpgpool-IIです。最大128個のノードを持つことができ、

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

別のオプションはスタドかもしれません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.