Rails多租户SAAS应用程序,具有用户可自定义的字段

时间:2013-09-13 10:19:50

标签: ruby-on-rails postgresql multi-tenant saas

我们正在构建一个SAAS应用程序。我们需要允许客户自定义某个模型的字段。他们应该能够添加或删除字段。该应用程序基本上是一种资产管理,客户应该能够自定义资产的属性。

我们有资产表。这些表有多个属性表,如warrantyvendormaintenance等。 即

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

我们有默认的属性集,但客户应该能够改变字段。

我们如何实现这一目标?

好的,这就是我所知道的。对于多租户,我们可以使用范围,或多个dbs或令人敬畏的PostgreSQL架构。但是我们如何为每个客户实现自定义字段。

我们应该去NoSQL吗?或者我们应该将RDBMS用于基表,NoSQL用于属性表吗?

具有此要求的可扩展SAAS应用程序的正确组合或解决方案或体系结构是什么?

2 个答案:

答案 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中。