- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为什么ORM性能比iBATIS好
缓存是有很多层次的,有web server前端缓存,有动态页面静态化,有页面片断缓存,有查询缓存,也有对象缓存。不同层面的缓存适用于不同的应用场景,作用也各自不同,如果可以,你全部一起用上,他们不矛盾,但这个话题比较大,现在不展开谈。 针对OLTP类型的web应用,只要代码写的质量没有问题,最终的性能瓶颈毫无疑问还是数据库查询。应用服务器层面可以水平扩展,但是数据库是单点的,很难水平扩展,所以如何有效降低数据库查询频率,减轻数据库压力,是web应用性能问题的根源。 以上所有的缓存方式都可以直接或者间接的降低数据库访问,但缓存是有应用场景的,虽然新闻网站非常适合使用动态页面静态化技术,但是例如电子商务网站就不适合动态页面静态化,而页面缓存和查询缓存可以使用的场景也不多。但是对象缓存是所有缓存技术当中适用场景最广泛的,任何OLTP应用,即使实时性要求很高,你也可以使用对象缓存,而且好的ORM实现,对象缓存是完全透明的,不需要你的程序代码进行硬编码。 用不用对象缓存,怎么用对象缓存,不是一个调优的技巧问题,而是整个应用的架构问题。在你开发一个应用之前,你就要想清楚,这个应用最终的场景是什么?会有多大的用户量和数据量。你将采用什么方式来架构这个应用: OK,也许你偏爱SQL,那么你选择iBATIS,数据库设计当中大表有很多冗余字段,会尽量消除大表之间的关联关系,最终用户量和访问量很高以后,你会选择使用Oracle,雇佣资深的DBA,进行数据库调优和SQL调优,这是大多数公司走的路。 但是我告诉你,你还有另外一条路可以走。你可以选择ORM(不见得一定是Hibernate),数据库设计当中避免出现大表,比较多的表关联关系,通过ORM以对象化方式操作。当用户量和访问量很高以后,除了数据库端本身的优化,你还有对象缓存这条途径。对象缓存是怎样提高性能的呢?随便举个例子: 论坛的列表页面,需要显示topic的分页列表,topic作者的名字,topic最后回复帖子的作者,如果是iBATIS,你准备怎么做?
Sql代码
select?...?from?topic?left?join?user?left?join?post?.....??
select ... from topic left join user left join post .....
你需要通过join user表来取得topic作者的名字,然后你还需要join post表取得最后回复的帖子,post再join user表取得最后回贴作者名字。 也许你说,我可以设计表冗余,在topic里面增加username,在post里面增加username,所以通过大表冗余字段,消除了复杂的表关联:
Sql代码
select?...?from?topic?left?join?post...??
select ... from topic left join post...
OK,且不说冗余字段的维护问题,现在仍然是两张大表的关联查询。然后让我们看看ORM怎么做?
Sql代码
select?*?from?topic?where?...?--分页条件??select * from topic where ... --分页条件
就这么一条SQL搞定,比上面的关联查询对数据库的压力小多了。 也许你说,不对阿,作者信息呢?回贴作者信息呢?这些难道不会发送SQL吗?如果发送SQL,这不就是臭名昭著的n+1条问题吗? 你说的对,最坏情况下,会有很多条SQL:
Sql代码
select?*?from?user?where?id?=?topic_id...; ??
.... ??
select?*?from?user?where?id?=?topic_id...; ??
??
select?*?from?post?where?id?=?last_topic_id...; ??
.... ??
select?*?from?post?where?id?=?last_topic_id...; ??
??
select?*?from?user?where?id?=?post_id...; ??
.... ??
select?*?from?user?where?id?=?post_id...;??
select * from user where id = topic_id...;
....
select * from user where id = topic_id...;
select * from post where id = last_topic_id...;
....
select * from post where id = last_topic_id...;
您可能关注的文档
- 基础工程技能考试试题8.doc
- 基础性学力反馈.doc
- 高中语文必修三四字音字词.doc
- 小儿术后镇痛快捷指南.doc
- 基础护理学考试辅导肌肉注射.doc
- 丹霞山导游词含播放提示0907.doc
- 小儿眼屎睡眠母乳好眼圈发青排便训练生理盐水清除鼻痂鼻涕.doc
- 小儿推拿对宝宝健康成长有八大好处.doc
- 高中语文教学论文浅论语文口语交际教学内容的核心.doc
- 基础护理质量检查标准.doc
- 2025年超星尔雅学习通《劳动通论》章节测试及参考答案【能力提升】.docx
- 2025年社区工作者考试试题库附答案(精练).docx
- 2025年法律常识题库word.docx
- 2025年计算机知识题库含大题及参考答案【综合题】.docx
- 2025年计算机知识题库含大题附参考答案ab卷.docx
- 2025年法律常识题库带答案(培优b卷).docx
- 2025年国家电网招聘之经济学类考试题库附参考答案【达标题】.docx
- 2025年注册消防工程师之消防安全技术实务题库及参考答案(培优).docx
- 2025年中国聚四氟乙烯不粘涂料项目投资可行性研究报告.docx
- 2025至2030年中国大屏幕手机行业市场竞争格局分析及投资方向研究报告.docx
文档评论(0)