V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tonghuashuai
V2EX  ›  NoSQL

大家怎么看 NoSQL 的 ORM

  •  
  •   tonghuashuai · 2013-11-13 15:50:05 +08:00 · 14663 次点击
    这是一个创建于 4063 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在用关系型数据库时,比较关心 ORM,但是最近用 Redis 和 MongoDB 时,发现用现有 API 已经不再迫切需要这种映射了。

    大家怎么看?
    第 1 条附言  ·  2013-11-13 17:11:33 +08:00
    忘了说了,我用的是 Python
    12 条回复    1970-01-01 08:00:00 +08:00
    humiaozuzu
        1
    humiaozuzu  
       2013-11-13 15:55:22 +08:00
    记得 SO 上面有开贴专门讨论过,结论就是不推荐用 ORM,丧失的灵活性不划算,而且 ORM 你干嘛用 NOSQL
    alsotang
        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 就已经很舒服了。
    est
        3
    est  
       2013-11-13 16:28:39 +08:00
    NoSQL用 ORM 就是发明 RDBMS 的节奏。
    yangff
        4
    yangff  
       2013-11-13 16:59:02 +08:00
    @alsotang ruby有元编程,用method_missing + define_method也不错就是了。
    http://ruby-china.org/topics/3434
    tonghuashuai
        5
    tonghuashuai  
    OP
       2013-11-13 17:12:19 +08:00
    @alsotang
    用 Python 的话,数据用字典接应该也挺方便的吧
    min
        6
    min  
       2013-11-13 17:25:31 +08:00
    json之类的话,没有必要做document to object mapping吧
    ququzone
        7
    ququzone  
       2013-11-13 17:30:26 +08:00
    这个主要看是哪种类型的NoSQL啦,MongoDB本身就是文档数据库,用了多余,Redis结构主要在Key上面体现,也没有必要,但是big table类的NoSQL用ORM处理起来方便多了,自己维护更新太麻烦,像Gora之类的ORM可以很好的封装通用操作,你只管写业务就可以啦。
    chloerei
        8
    chloerei  
       2013-11-13 17:32:06 +08:00
    ODM 可以提供这些功能:getter/setter,校验,关联方法,回调等等,如果不需要这些功能就不需要 ODM 了,例如记日志。
    alsotang
        9
    alsotang  
       2013-11-13 20:25:00 +08:00
    @chloerei 老实说,这些东西还是相当方便的。在应用开发来说。
    v88ex
        10
    v88ex  
       2013-11-13 21:31:12 +08:00
    我用过Mongoengine,这个ORM和sqlalchemy不同的是,他只能是在应用层做约束。而不是深入到数据库层。
    如果业务逻辑很复杂。还是有必要拿个东西做应用层约束。否则不检查就直接写入数据库容易造成业务逻辑错误。
    yyfearth
        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。
    c19
        12
    c19  
       2013-11-14 20:59:14 +08:00
    我用mongodb一开始试了几个ORM,写得非常爽,但熟悉原生API后发觉,ORM什么的让我爽得地方只是写出来干净,用原生API其实很方便,一次读取得东西就在一个Document里,有时候再加projection取所需得,没有ORM或ODM得必要,像楼上说的,写着写着你就自己写出了个轻量ODM。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1350 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.