背景

提起orm,在我开发这几年可是阴魂不散,因为我的开发没人带,全是自己琢磨,好处是很多东西都懂,都理解的透彻,缺点是见得少,接触少。而我一直没用orm,但是又到处听说orm,但我总想不明白有啥用处,还感觉挺麻烦,当初也主要靠sql解决事情。也就一直没用,主要也是有点不愿意改变自己的意思。

有一次,一个项目,我搞来搞去,自己搞了套类似orm的东西,想替代实体类, 后来反转来去,终于发现orm的优势了。其实orm与sql是共同必须的,新人容易纠结在过程当中无法自拔,只要融会贯通了就简单了。

以下转载部分知识当初为了记下这个事情找的文章,不是个人观点。

转载部分

目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容易大大增加开发的复杂度及牺牲灵活度。使用 ORM 不写 SQL 而使数据库交互变得简单易行,是否能够达到预期效果,要画一个问号。

主要问题可能存在于以下几点:

1.大幅度牺牲性能。

2.虽然隐藏了数据层面的设计,但并没有从根本上降低数据访问复杂度,只是将复杂纬度从一个点(SQL,存储过程)转移到另一个点(代码),以EF为例,最终生成的代码性能与C#书写有很大关系,且难以通过成熟的数据库技术反查性能瓶颈。

3.对于复杂查询,ORM 力不从心,虽然从技术角度说实现肯定都能实现,但是代价是不值的。

有朋友认为 ORM 可以使不懂数据库的开发人员也能在开发中轻松实现与数据库的交互,但是,在大型项目中,让不懂数据库的开发人员做这块工作,Are you kidding me?

在我自己的项目开发经验中,ORM 还存在以下问题:

1.对于大型项目的开发,表示数据的实体类和数据库层面的持久化设计并非一一对应的关系,使用ORM根据数据库表生成一一对应的实体类模型,并不能完全适用,这是促使我实现自己的增强组件的重要原因之一;

2.在实体类中,需要进行其它编码工作,如额外的属性定义,附加额外的Attribute,部分功能实现和业务操作等,而使用ORM来生成实体类,生成时会覆盖现有实体类而导致项目自身的编码工作丢失;

orm 缺点的更多相关文章

  1. 补充:垃圾回收机制、线程池和ORM缺点

    补充:垃圾回收机制.线程池和ORM缺点 垃圾回收机制不仅有引用计数,还有标记清除和分代回收 引用计数就是内存地址的门牌号,为0时就会回收掉,但是会出现循环引用问题,这种情况下会导致内存泄漏(即不会被用 ...

  2. ORM即 对象-关系映射(转自:微冷的雨)

    ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨  来源: 博客园  发布时间: 2013-01-22 16:2 ...

  3. ORM sqlachemy学习

    内容: 1.ORM介绍 2.SQLAlchemy介绍 3.SQLAlchemy内部处理 4.SQLAlchemy使用 参考: http://www.cnblogs.com/wupeiqi/articl ...

  4. 对象关系映射(ORM)

    1.什么是 对象-关系映射 对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,OR ...

  5. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

  6. Django进阶(三)

    ORM 众所周知有很多不同的数据库系统,并且其中的大部分系统都包含Python接口,能够让我们更好的利用它们的功能,而这些系统唯一的缺点就是需要你了解SQL,如果你是一个更愿意操纵Python对象,而 ...

  7. 04:sqlalchemy操作数据库

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  8. python面试知识总结

    1. 先做自我介绍 2. 做Python几年了?为什么选择Python?3. 学历?大学什么专业?4. 除了Python以外对其他语言有没有了解?5. 你对Python这门语言的看法?6. 在学习Py ...

  9. [转载]灵动思绪EF(Entity FrameWork)

    很久之前就想写这篇文章了,但是由于种种原因,没有将自己学习的EF知识整理成一片文章.今天我就用CodeFirst和ModelFirst两种方式的简单案例将自己学习的EF知识做个总结. 在讲解EF之前, ...

随机推荐

  1. Mobile Phone Network CodeForces - 1023F(并查集lca+修改环)

    题意: 就是有几个点,你掌控了几条路,你的商业对手也掌控了几条路,然后你想让游客都把你的所有路都走完,那么你就有钱了,但你又想挣的钱最多,真是的过分..哈哈 游客肯定要对比一下你的对手的路 看看那个便 ...

  2. HEOI2018(九省联考) 题解集合

    转载请注明出处:http://www.cnblogs.com/LadyLex/p/8792894.html 今年的省选题目真是赞啊……Day2的题完全不会做…… 不过终于卡着校线爬着进了B队 终于改完 ...

  3. Problem C Dist 解题报告

    Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...

  4. UVAlive-7040 color(组合数学,二项式反演)

    链接:vjudge 题目大意:有一排方格共 $n$ 个,现在有 $m$ 种颜色,要给这些方格染色,要求相邻两个格子的颜色不能相同.现在问恰好用了 $k$ 种颜色的合法方案数.答案对 $10^9+7$ ...

  5. 【COGS2479】 HZOI2016—偏序

    http://cogs.pro/cogs/problem/problem.php?pid=2479 (题目链接) 题意 四维偏序. Solution CDQ套CDQ. 细节 第二次分治不能直接按照mi ...

  6. hiho_offer收割18_题解报告_差第四题

    I.求逆元欧几里得方法 II.模拟细心+耐心 *本人感悟:自己的错误在于:对于这道模拟题没有耐心静下来一字一字看题,一行一行调错,一步一步调试,我要引以为戒. III.dpf[i][j][k]=max ...

  7. RabbitMQ 客户端开发向导

    准备工作:composer 引入 php-amqplib 说明:本文说明基于 Java(主要说明原理),实现使用 php RabbitMQ Java 客户端使用 com.rabbitmq.client ...

  8. Hadoop生态圈-Azkaban实战之Command类型执行指定脚本

    Hadoop生态圈-Azkaban实战之Command类型执行指定脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.服务端测试代码(别忘记添加权限哟!) [yinzh ...

  9. Spark记录-Spark On YARN内存分配(转载)

    Spark On YARN内存分配(转载) 说明 按照Spark应用程序中的driver分布方式不同,Spark on YARN有两种模式: yarn-client模式.yarn-cluster模式. ...

  10. Spark记录-spark介绍

    Apache Spark是一个集群计算设计的快速计算.它是建立在Hadoop MapReduce之上,它扩展了 MapReduce 模式,有效地使用更多类型的计算,其中包括交互式查询和流处理.这是一个 ...