我们正在构建一个SAAS应用程序。我们需要允许客户定制特定模型的字段。它们应该能够添加或删除字段。这个应用程序基本上是一个资产管理,客户应该能够定制资产的属性。
我们有关于资产的桌子。这些表有多个属性表,如warranty、vendor、maintenance等。
class Computer < ..
has_one :warranty
has_one :vendor
end我们有默认的属性集,但是客户应该能够修改字段。
我们如何做到这一点?
好的,这是我所知道的。对于多租户,我们可以使用作用域,或多个dbs或可怕的PostgreSQL模式。但是,我们如何为每个客户实现自定义字段。
我们该去找NoSQL吗?或者我们应该对基本表使用关系数据库管理系统,对属性表使用NoSQL?
对于具有此需求的可伸缩SAAS应用程序,正确的组合、解决方案或体系结构是什么?
发布于 2013-09-13 12:08:05
这取决于用例,您有很多选择。但是,在我看来,如果可能的话,最好避免同时使用两种类型的db。
如果您没有使用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。
发布于 2013-09-13 10:25:57
你绝对应该像NoSQL一样喜欢MongoDB。用户、概要文件等需要事务处理的基本表应该放在RDBMS中。
https://stackoverflow.com/questions/18783928
复制相似问题