0

SAASアプリケーションを構築しています。顧客が特定のモデルのフィールドをカスタマイズできるようにする必要があります。フィールドを追加または削除できる必要があります。このアプリケーションは基本的に、顧客が資産の属性をカスタマイズできる資産管理です。

アセット用のテーブルがあります。warrantyこれらのテーブルには、vendormaintenanceなどの複数の属性テーブルがあります。

class Computer < ..
 has_one :warranty
 has_one :vendor
end

そこにはデフォルトの属性セットがありますが、顧客はフィールドを変更できるはずです。

どうすればこれを達成できますか?

私が知っていることはわかりました。マルチテナンシーの場合、スコープ、複数のデータベース、またはすばらしい PostgreSQL のスキーマを使用できます。しかし、顧客ごとにカスタム フィールドを実装するにはどうすればよいでしょうか。

NoSQL を使用する必要がありますか? または、ベース テーブルに RDBMS を使用し、属性テーブルに NoSQL を使用する必要がありますか?

この要件を満たすスケーラブルな SAAS アプリの適切な組み合わせ、ソリューション、またはアーキテクチャは何ですか?

4

2 に答える 2

2

それはユースケースに依存し、多くの選択肢があります。しかし、私の意見では、可能な限り 2 種類のデータベースを一緒に使用することは避けたほうがよいでしょう。

PostgreSQL を使用しておらず、それらの属性に重いクエリを必要としない場合は、ActiveRecordserializeが役に立ちます。テキスト フィールドを使用して、シリアル化されたハッシュと配列を格納します。ネスティングは許容されますが、速度は遅くなります。

すべての属性が 1 つのレベルのキーと値のペアである場合、たとえば、保証: 18 か月、ベンダー: 123 の場合、PostgreSQL に組み込まれている "hstore" が適切な選択です。

「hstore」は柔軟で高速ですが、ネストされたハッシュには適していません。そして、それを扱う素晴らしい宝石があります: https://github.com/diogob/activerecord-postgres-hstore

ネストされたハッシュの場合、PostgreSQL の「JSON」フィールド タイプが役立つ場合があります。http://www.postgresql.org/docs/devel/static/functions-json.htmlこれは新しく、以前は使用したことがありませんでしたが、より安定していて実用的だと聞いただけです。

問題を解決するには、これらの選択で十分だと思います。それでもできない場合は、MongoDB を検討してみてください。

于 2013-09-13T12:08:05.397 に答える
1

MongoDB のような NoSQL を使用する必要があります。ユーザー、プロファイル、およびトランザクション処理を必要とするその他のものなどのベーステーブルは、RDBMS に移動する必要があります。

于 2013-09-13T10:25:57.197 に答える