我们正在构建一个SAAS应用程序。我们需要允许客户自定义某个模型的字段。他们应该能够添加或删除字段。该应用程序基本上是一种资产管理,客户应该能够自定义资产的属性。
我们有资产表。这些表有多个属性表,如warranty
,vendor
,maintenance
等。
即
class Computer < ..
has_one :warranty
has_one :vendor
end
我们有默认的属性集,但客户应该能够改变字段。
我们如何实现这一目标?
好的,这就是我所知道的。对于多租户,我们可以使用范围,或多个dbs或令人敬畏的PostgreSQL架构。但是我们如何为每个客户实现自定义字段。
我们应该去NoSQL吗?或者我们应该将RDBMS用于基表,NoSQL用于属性表吗?
具有此要求的可扩展SAAS应用程序的正确组合或解决方案或体系结构是什么?
答案 0 :(得分:2)
这取决于用例,你有很多选择。但是,在我看来,最好避免在可能的情况下同时使用两种数据库。
如果您没有使用PostgreSQL,并且这些属性不需要繁重的查询,ActiveRecord serialize
可以提供帮助。它利用文本字段存储序列化的散列和数组。嵌套可接受,速度较慢。
如果所有属性都是一个级别的键/值对,例如,保修:18个月,供应商:123,那么“hstore”是一个不错的选择,内置于PostgreSQL中。
“hstore”灵活快速,但不适合嵌套哈希。并且有一个伟大的宝石处理它:https://github.com/diogob/activerecord-postgres-hstore
如果嵌套哈希,PostgreSQL“JSON”字段类型可能会有所帮助。 http://www.postgresql.org/docs/devel/static/functions-json.html这是新的,我之前没有使用过,只是听说它更稳定和实用。
我认为这些选择应足以解决您的问题。如果他们仍然无法做到,也许你可以考虑使用MongoDB。
答案 1 :(得分:1)
你绝对应该像MongoDB那样使用NoSQL。像用户,配置文件和其他需要事务处理的东西的基表应该在RDBMS中。