2012-04-16 10 views
0

私はRuby on Railsを使用しており、認証のために工夫しています。私はユーザー(顧客)モデルとビジネスモデルを持っています。私は、ユーザー(顧客)が特定のビジネスを通じてサインアップして、特定のビジネスに属したいと思っています。ビジネスには多くのユーザー(顧客)がいますが、ユーザーは1つのビジネスにしか属しません。私はビジネスが自分のIDのサブドメインを使用して自分のIDに対応できるようにしたいと思ってしまいましたが、その時点で私はそれに近づいています。複数のデータベースを使用する必要がありますか?

正直私はまだ高校に通っていて、このようなものがすべてどのように一緒に来るのか良い考えがありません。だから、私はこのアプリを企業にライセンス供与することを計画しています(すでにこの製品を開発する前に、前払いしたものがいくつかあります)。各ビジネスのデータは、他のビジネスとは別にする必要があります。一部の企業ではドメインがないため、サーバー上でサブドメインを使用する必要があります。一部の企業ではウェブサイトがあるので、ビジネスドメインを通じてサブドメインを使用したいと考えています。

私は今、正直なところ、私はデータベース構造の非常に限られた知識を持っている...複数のデータベースを使用することを間違いなく良いです考えています。私はこれをロールする最良の方法かもしれないと考えてきた個々の個別のアプリを実行することが可能だと信じています。また、開発/維持するのが最も簡単なのでしょうか?

私の質問は、複数のデータベースの実行と個別の個別のアプリケーションの実行とのトレードオフは何ですか?実際にこれを行う方法の詳細はどこで分かりましたか?また、誰も私が正しい方向にこれらのドメインを転送するか、または私がしなければならないと私を導くことができますか?

私の質問が十分にはっきりしていない場合は、またコメントしてください...と申し訳ありませんが、それはとても笑いです。

答えて

2

あなたが複数のデータベースの道を下るたらあなたはそれをよりよく行うための非常に良い理由を持っているので、簡単に、戻ることはできません。深刻なスケーリングの問題がない限り、できるだけその決定を遅らせ、代わりに標準的な関係を使用してデータベースを分割することが最善の方法です。

Railsを使用すると、ほとんどすべてにスコープを適用できます。たとえば、ビジネスモデルを作成し、他のオブジェクトを直接フェッチするのではなく、常に特定のコンテキストで実行します。実際には、これは次のようになります。

@orders = @business.orders.paginated 
あなたはこれをする必要がないように before_filterを使用して正しい @businessモデルにロードすること、親クラスのあなたの「ビジネス指向」のコントローラのすべての子孫を作ることができます

多くの異なるコントローラーで複製されています。

あなたは、データベースを分割したいん任意の時点で、あなたはbusiness_idまたはその他の派生関係に基づいてテーブルを分離することによってそれを行うことができます。

これはほとんどのアプリケーションでうまく機能することがわかりました。スケーラビリティーの最初のステップは、アプリケーションを内部的に複雑化することなく読み取り性能を大幅に向上させることができるため、スケーリングの第一歩は共有ではなく複製です。