lz 用过 bento 和 mystuff2,这种可以去自己添加字段的数据库类似产品是怎么实现的。 今天晚上想了一晚上,感觉用关系型数据库很难去做这件事,hashmap 做这个事情倒是很方便,但是持久化和搜索都要花点功夫。 各位有何高见。 以前也想过类似的问题,在 omnifous 里面可以做到无限层级,数据库很难很难,事后证明 Omnigroup 是用 xml 来做这件事情的。
@winnie 一层就用 PostgreSQL 的 hstore, 比 json 字段效率更高。
就算是用 MySQL 或者 sqlite3, 也可以用一个文本字段来做 Hash 或者 Array,然后 ActiveRecord.serialize,只是查询比较麻烦,取值速度稍慢,基本功能没什么问题。
@billy 不错,不过效率更高的是 jsonb
PostgreSQL 9.4 将于第三季度发布,该版本最大特色是新增:JSONB 类型,即二进制json格式。 用json替代可变表内容属性(比如不同商品的不同特定属性:颜色,重量等)将成为一种可能,这也是文档型数据库我最喜欢的一点。 JSONB的查询性能已经快于MongoDB,惊讶不? https://plus.google.com/+ThomBrownUK/posts/1JizRBGPYBq http://www.reddit.com/r/programming/comments/1q3skb/postgresql_94_is_now_faster_than_mongodb_for/
@winnie 你说的是和 MongoDB 的对比。hstore 是 PostgreSQL 本身内置的插件,比 JSONB 出来更早,只适用单层。如果是单层字段,当然是用单层的算法快了。
@billy 对,我比较错对象了,JSONB 融合了 JSON 和 HSTORE 两者的优点,也许要实际测试一下才能有结果。
楼主看看这个,是不是你想要的?https://github.com/leomayleomay/serialize_virtual_attributes
用关系型数据库可以用 2 楼提到的文本存 Hash,但搜索起来就麻烦了。 参考 railscast: http://railscasts.com/episodes/403-dynamic-forms https://github.com/railscasts/403-dynamic-forms
或者就用 pg 的扩展功能 hstore 或者 JSONB