1
humiaozuzu 2013-11-13 15:55:22 +08:00
记得 SO 上面有开贴专门讨论过,结论就是不推荐用 ORM,丧失的灵活性不划算,而且 ORM 你干嘛用 NOSQL
|
2
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 就已经很舒服了。 |
3
est 2013-11-13 16:28:39 +08:00
NoSQL用 ORM 就是发明 RDBMS 的节奏。
|
4
yangff 2013-11-13 16:59:02 +08:00
|
5
tonghuashuai OP @alsotang
用 Python 的话,数据用字典接应该也挺方便的吧 |
6
min 2013-11-13 17:25:31 +08:00
json之类的话,没有必要做document to object mapping吧
|
7
ququzone 2013-11-13 17:30:26 +08:00
这个主要看是哪种类型的NoSQL啦,MongoDB本身就是文档数据库,用了多余,Redis结构主要在Key上面体现,也没有必要,但是big table类的NoSQL用ORM处理起来方便多了,自己维护更新太麻烦,像Gora之类的ORM可以很好的封装通用操作,你只管写业务就可以啦。
|
8
chloerei 2013-11-13 17:32:06 +08:00
ODM 可以提供这些功能:getter/setter,校验,关联方法,回调等等,如果不需要这些功能就不需要 ODM 了,例如记日志。
|
10
v88ex 2013-11-13 21:31:12 +08:00
我用过Mongoengine,这个ORM和sqlalchemy不同的是,他只能是在应用层做约束。而不是深入到数据库层。
如果业务逻辑很复杂。还是有必要拿个东西做应用层约束。否则不检查就直接写入数据库容易造成业务逻辑错误。 |
11
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。 |
12
c19 2013-11-14 20:59:14 +08:00
我用mongodb一开始试了几个ORM,写得非常爽,但熟悉原生API后发觉,ORM什么的让我爽得地方只是写出来干净,用原生API其实很方便,一次读取得东西就在一个Document里,有时候再加projection取所需得,没有ORM或ODM得必要,像楼上说的,写着写着你就自己写出了个轻量ODM。
|