2012-05-01 8 views
10

何百もの顧客を持つサービスとしてのソフトウェアとしてpostgresqlにデータベースを用意していますが、現在カスタマーごとにpostgresqlのスキーマがあります。私はキャサンドラについて読んだけど、私はプライマリ、フォージンの鍵と小切手の完全性を失いたくない。また、分散システムでのPostgreSQLについて読むが、私はこれを実装するための最良の方法は何であるかを知らない現在postgresqlを配布する最良の方法

答えて

10

あなたの顧客を分離することができたのは4つのレベルがあります。

  1. が用に別のPostgreSQLクラスタを実行するには、各顧客。これにより最大の分離が得られます。各クライアントは、独自のシステムテーブル、トランザクションログなどの別のポートにあります。

  2. 各顧客を同じクラスタ内の別々のデータベースに配置します。このようにして、それぞれが別々のログインを持ちますが、同じポート番号で、pg_databaseのようなグローバルテーブルを共有します。

  3. 各顧客に同じデータベース内の別個のスキーマを提供します。 search_pathを設定するだけでよいので、ソフトウェアを介してのみ接続する場合は、別のユーザーIDは必要ありません。もちろん、別のユーザーIDを使用することもできます。

  4. 各テーブルのプライマリキーの一部にcustomer_idを作成し、ソフトウェアでそれを必ず制限してください。これは、数百人のユーザーのそれぞれに対して重複テーブルを持つよりも拡張が容易ですが、常にcustomer_idでクエリを修飾するように注意する必要があります。

たとえば、顧客ごとに個別のデータベースを使用して各クラスターを100個のデータベースに制限することが知られている人もいます。

あなたの状況に最も適した構成を知ることは難しいですが、ユーザーがソフトウェアを経由せずにデータベースに直接アクセスできるようにする場合は、表示されるものについて考える必要があります各オプションを持つシステムテーブルユーザーの観点から、pg_database、pg_user、およびpg_classを見て、公開されているものを確認してください。

7

私がしたいあなたは、主、foreginキーおよびチェック

カサンドラのようなシステムのポイントは、あなたのデータセットまたはワークロードいったん単一のマシンに収まらないされ

の整合性を失うことはありませんあなたがpostgresqlにいてもそれらのことをあきらめなければならない。 (私は非常にお勧めする話で詳細をカバーした:http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-what-every-developer-should-know-about-database-scalability-21-3280648)。

カッサンドラは、「外部キーと結合をあきらめなければならない場合は、データベースの設計方法を再考することで何ができますか」という質問に対する答えです。

あなたがその点に決して到達しない場合、カサンドラは過剰です。 (しかし、あなたはまだその話を見なければなりません:)

+0

話が大好き! +1 – Abdo

+0

上記のリンクは話につながりません。関連リンクを投稿してください。 – SahuKahn

+0

@SahuKahnこれら2つを試してください: *ビデオ:http://pyvideo.org/video/313/pycon-2010--what-every-developer-should-know-abou *スライド:http://www.slideshare 。net/jbellis/what-every-developer-should-about-about-database-scalability-pycon-2010 –

関連する問題