Posted on:
Last modified:
连外键都不用的今天,再用 ORM 还有什么意义呢?别人云亦云,认真思考下这个问题。
总之,ORM 就是计算机科学界的越南战争泥坑(美国视角), SQL 和面向对象本来就是不 match 的,非要强行 map 起来,能舒服了才怪。
ORM 的缺点则很致命:无法控制生成的 SQL.
ORM 隐藏了 SQL 语句,使得我们没法使用 SQL 的方式思考,容易写出性能较低的代码。ORM 生成的 SQL 有的也很低效。
在我们编写 SQL 相关的程序的时候很容易犯的一个错误是 "N+1" 查询,也就是说本来应该用一个语句实现的查询,我们却使用了 N+1 个查询。
读取的数据过多。一般情况下,我们可能只需要读取一两个字段,但是 ORM 默认的确是 select *
, 导致性能下降。
如果使用 ORM 的话,实际上你在学习一门新的 DSL, 而且这个 DSL 还不是很通用。这点其实是最最重要的问题了,sql 的语法是 universal 的,是到处可用的,作为一个程序员你必须也不可能绕过去。
ORM 库往往和数据库的链接池,也就是 IO 部分耦合在一起,导致在需要不同的链接管理方式的时候非常难以修改。
今天喷不动了,翻译一篇国外的文章,告诉大家辛辛苦苦学的 ORM 都是没用的。
原文链接先贴上:
以下为译文:
我已经得出结论了,对我来说,ORM 的损害比收益还大。简而言之,在程序里,ORM 可以稍稍地增强 SQL, 但是完全替代不了 SQL.
一些背景:在过去的 30 个月里,我一直在写用到 PostgreSQL 和 SQLite 的代码。大多是的时候是用 SQLAlchemy(我还挺喜欢的)和 Hibernate(我不喜欢). 我使用过已有的代码和数据模型,也设计过自己的。大多数的数据是事件驱动的存储方式(时间线)并且需要创建很多报告。
关于"对象-关系-不匹配"这个话题好多人写过很多了。只有经历过才能懂这个东西。
我为什么不使用 ORM, 有两点原因:
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站