大家怎么看 NoSQL 的 ORM

2013-11-13 15:50:05 +08:00
 tonghuashuai
在用关系型数据库时,比较关心 ORM,但是最近用 Redis 和 MongoDB 时,发现用现有 API 已经不再迫切需要这种映射了。

大家怎么看?
14658 次点击
所在节点   NoSQL
12 条回复
humiaozuzu
2013-11-13 15:55:22 +08:00
记得 SO 上面有开贴专门讨论过,结论就是不推荐用 ORM,丧失的灵活性不划算,而且 ORM 你干嘛用 NOSQL
alsotang
2013-11-13 16:07:04 +08:00
@humiaozuzu
“而且 ORM 你干嘛用 NOSQL”,用 nosql 又不一定是为了 无schema。mongodb 和 gae datastore 的最佳实践都认为最好数据是有schema的,这样好处理。
回到楼主的问题上来,mongodb 的其实叫 odm,orm 的 r 是关系,d 是文档。如果说楼主觉得现在已经不是很必要用 odm 了话,或许楼主是在通过 js 操作 mongodb 吧。如果是用 js,确实很多时候并不需要 orm 就可以很方便地操作文档,因为 json 表示的数据本来就很好操作。
但在操作 json 没有这么方便的语言中,比如 python 或者 ruby 甚至 java 的话,如果不封装个对象,就很难对有结构的数据进行操作啊。
我们现在公司开发有用到sql,后端用node。我也没有感觉有使用 orm 的需要。json 就已经很舒服了。
est
2013-11-13 16:28:39 +08:00
NoSQL用 ORM 就是发明 RDBMS 的节奏。
yangff
2013-11-13 16:59:02 +08:00
@alsotang ruby有元编程,用method_missing + define_method也不错就是了。
http://ruby-china.org/topics/3434
tonghuashuai
2013-11-13 17:12:19 +08:00
@alsotang
用 Python 的话,数据用字典接应该也挺方便的吧
min
2013-11-13 17:25:31 +08:00
json之类的话,没有必要做document to object mapping吧
ququzone
2013-11-13 17:30:26 +08:00
这个主要看是哪种类型的NoSQL啦,MongoDB本身就是文档数据库,用了多余,Redis结构主要在Key上面体现,也没有必要,但是big table类的NoSQL用ORM处理起来方便多了,自己维护更新太麻烦,像Gora之类的ORM可以很好的封装通用操作,你只管写业务就可以啦。
chloerei
2013-11-13 17:32:06 +08:00
ODM 可以提供这些功能:getter/setter,校验,关联方法,回调等等,如果不需要这些功能就不需要 ODM 了,例如记日志。
alsotang
2013-11-13 20:25:00 +08:00
@chloerei 老实说,这些东西还是相当方便的。在应用开发来说。
v88ex
2013-11-13 21:31:12 +08:00
我用过Mongoengine,这个ORM和sqlalchemy不同的是,他只能是在应用层做约束。而不是深入到数据库层。
如果业务逻辑很复杂。还是有必要拿个东西做应用层约束。否则不检查就直接写入数据库容易造成业务逻辑错误。
yyfearth
2013-11-14 04:06:30 +08:00
用JS之类的动态语言,如果不需要schema进行验证和添加其他逻辑就不需要ODM,这个是自然的。但是做起来往往还是需要作验证操作,当然你可以用单纯validation的框架,也可以用ODM来作。

但是如果你用Java这样的静态类型语言,不用ODM转换成Object看你怎么操作。
用NoSQL又不一定是要他的No Schema特性,有时候仅仅是为了性能或者可扩展性。

对于Python而言 估计和Ruby差不多,如果你觉得直接对字典进行操作当然可以不用,如果你想对Object操作,尤其你想在Entity上面加上一些逻辑,用ODM就又意义了。如果你打算自己封装,那么相当于自己作一个轻量级的ODM。
c19
2013-11-14 20:59:14 +08:00
我用mongodb一开始试了几个ORM,写得非常爽,但熟悉原生API后发觉,ORM什么的让我爽得地方只是写出来干净,用原生API其实很方便,一次读取得东西就在一个Document里,有时候再加projection取所需得,没有ORM或ODM得必要,像楼上说的,写着写着你就自己写出了个轻量ODM。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/89133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX