10

私はpostgresqlに数百人の顧客を抱えるサービスとしてのソフトウェアのデータベースを持っており、現在は各顧客のpostgresqlのスキーマを持っていますが、顧客が急速に増加しているため、最良のソリューションが好きです。私はカサンドラについて読みましたが、プライマリ、外国のキーとチェックの整合性を失いたくありません。分散システムでのpostgresqlについても読んでください、しかし私はこれを現在実装するための最良の方法が何であるかわかりません

4

2 に答える 2

10

顧客を分けることができる4つのレベルがあります:

  1. 顧客ごとに個別のPostgreSQLクラスターを実行します。これにより、最大の分離が実現します。各クライアントは、独自のシステムテーブル、トランザクションログなどのセットを備えた個別のポート上にあります。

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

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

  4. customer_idを各テーブルの主キーの一部にし、ソフトウェアでそれによって制限するようにしてください。これは、数百人のユーザーごとにテーブルを複製するよりも拡張性が高い可能性がありますが、クエリをcustomer_idで常に修飾するように十分に注意する必要があります。

一部の人々は、これらの手法を組み合わせることが知られています。たとえば、各クラスターを100のデータベースに制限し、顧客ごとに個別のデータベースを作成します。

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

于 2012-05-01T18:03:02.937 に答える
7

プライマリ、外国のキーとチェックの整合性を失いたくない

Cassandraのようなシステムのポイントは、データセットまたはワークロードが単一のマシンに収まらない場合、postgresqlにとどまっている場合でもそれらをあきらめなければならないということです。(私が強くお勧めする講演で詳細を取り上げました:http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-what-every-developer-should-know-about-database -拡張性-21-3280648)。

したがって、Cassandraは、「外部キーと結合を放棄する必要があることがわかっている場合、データベースの設計方法を再考することで何を構築できるか」という質問に対する答えです。

その時点に到達しない場合、カサンドラはやり過ぎです。(しかし、あなたはまだその話を見るべきです。:)

于 2012-05-09T03:03:44.920 に答える