我们正在构建一个 SAAS 应用程序。我们需要让客户自定义某个模型的字段。他们应该能够添加或删除字段。此应用程序基本上是一种 Assets 管理,客户应该能够在其中自定义 Assets 的属性。
我们有 Assets 表。这些表有多个属性表,如warranty
、vendor
、maintenance
等。
即
class Computer < ..
has_one :warranty
has_one :vendor
end
我们在那里有一组默认属性,但客户应该能够更改这些字段。
我们如何实现这一目标?
好的,这就是我所知道的。对于 Multi-Tenancy ,我们可以使用作用域、多个数据库或很棒的 PostgreSQL 模式。但是我们如何为每个客户实现自定义字段。
我们应该选择 NoSQL 吗?还是我们应该为基表使用 RDBMS,为属性表使用 NoSQL?
具有此要求的可扩展 SAAS 应用的正确组合、解决方案或架构是什么?
最佳答案
这取决于用例,您有多种选择。但是,在我看来,最好避免同时使用两种数据库。
如果您不使用 PostgreSQL 并且不需要对这些属性进行繁重的查询,ActiveRecord serialize
可以提供帮助。它利用一个文本字段来存储序列化的散列和数组。可以嵌套,速度较慢。
如果所有属性都是一级键/值对,比如保修期:18 个月,供应商:123,那么“hstore”是一个不错的选择,它内置于 PostgreSQL 中。
“hstore”灵活快速,但不适合嵌套哈希。有一个很棒的 gem 处理它:https://github.com/diogob/activerecord-postgres-hstore
如果嵌套哈希,PostgreSQL“JSON”字段类型可能会有所帮助。 http://www.postgresql.org/docs/devel/static/functions-json.html这是新的,我以前没用过,只是听说它更稳定和实用。
我认为这些选择应该足以解决您的问题。如果还是不行,或许可以考虑MongoDB。
关于ruby-on-rails - 具有用户自定义字段的 Rails Multi-Tenancy SAAS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783928/