0

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

我们有资产表。并且这些表有多个属性表,如,warranty等。即vendormaintenance

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

我们在那里有一组默认属性,但客户应该能够更改这些字段。

我们如何实现这一目标?

好的,这就是我所知道的。对于多租户,我们可以使用范围,或多个数据库或很棒的 PostgreSQL 模式。但是我们如何为每个客户实现自定义字段。

我们应该选择 NoSQL 吗?还是我们应该将 RDBMS 用于基表,将 NoSQL 用于属性表?

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

4

2 回答 2

2

这取决于用例,您有很多选择。但是,在我看来,最好尽可能避免同时使用两种数据库。

如果您不使用 PostgreSQL,并且这些属性不需要繁重的查询,ActiveRecordserialize可以提供帮助。它利用一个文本字段来存储序列化的哈希和数组。嵌套可接受,速度较慢。

如果所有属性都是一级键/值对,比如保修: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。

于 2013-09-13T12:08:05.397 回答
1

你绝对应该选择像 MongoDB 这样的 NoSQL。像用户、配置文件和其他需要事务处理的基本表应该放在 RDBMS 中。

于 2013-09-13T10:25:57.197 回答