你好,游客 登录
背景:
阅读新闻

四步提升数据访问层缓存部署

[日期:2014-12-01] 来源:TechTarget中国原创  作者:Eunice [字体: ]

      MyBatis提供自己的缓存部署,不过如果需要,它也允许在第三方帮助下集成MyBatis数据访问层。

    本文会从一下角度论述MyBatis:

    概览:这个部分会讨论你为什么需要持续性,MyBatis上的缓存如何提升应用程序的功能。(需要建立代码环境,这有利于更好地理解缓存)。

MyBatis上的Ehache部署:可以帮助提升数据访问层的性能(下文会给出代码)。

MyBatis上的Hazelcast部署:可以帮助部署数据访问层(下文会给出代码)。

MyBatis上的操作系统缓存部署:可以帮助提升数据访问层性能(下文会给出代码)。

Memcache上的缓存部署:为什么需要使用它,它是如何提升数据访问层性能的?

总结:对以上四种部署的总结,归纳各自的优势和不足。

    点击这里访问代码

    概览

    之所以出现对持久性的需求,是因为很多应用程序都被开发和部署在包含基于浏览器的客户端、Web应用程序服务器和后端数据库的多层环境中。这些应用程序需要通过与后端数据库的交流按需服务网页,这是由它们动态本质决定的。持久性出现了,并发展成这些应用程序中的一部分,成了实现高可扩展性和高性能的必要条件。

    通 过持久性,应用程序有一个数据访问层,它可以提供对数据库的简单访问,但是,如果应用程序通过反复访问数据的形式按需服务网页,应用程序的性能就会降低。 持久性框架提供了一个内置的缓存特性,但有时这还不够(对于数据库检索、需要不同的锁定模型来说,一个单独价值的最大规模化远远不够。)

MyBatis为什么应用程序而设计?

    要 回答这个问题,需要先了解一下MyBatis的背景。MyBatis的前身是iBatis,iBatis框架的创建者离开了创建团队,因为劳动协议的关 系,他们必须继续产品研发,但要冠以新的名字,于是就有了MyBatis。为了了解你是需要MyBatis,你需要看看下面的表格:

 

问题

是否适合部署MyBatis (是或否)

是否适合目前使用的持久性架构 (是或否)

1

架构时Java平台标准版的一部分吗?(JSE) 

 

2

是开源部署吗? 

 

3

框架支持实行任意的SQL语句吗? 

 

4

框架支持批处理的多个语句吗? 

 

5

框架支持把查询数据自动映射到Java对象吗? 

 

6

框架支持修改独立于Java代码的查询吗? 

 

7

容易学会吗?

 

8

它可以直接把Java对象映射到数据表中吗(是ORM解决方案吗)?

 

9

它提供针对数据规模变化的适应性吗?

 

10

是依赖SQL的吗?

 

11

提供performance吗?

 

12

他提供跨不同关系型数据库中的可移植性吗?

 

13

它有社区的支持和文档吗?

 
 

12

 
 

1

 


    请填上你现在使用的持久性架构的答案,像上表一样填上是和否,然后对比一下结果。无论哪种架构获胜,它都有利于你了解MyBatis。

    如果你选择MyBatis,以下是一些优点和缺点:

优点

缺点

开发者使用SQLiBATIS使用Java数据库连接器执行,

没有合适的查询语言

一个SQL Mapper,支持摆脱(N+1)查询

不会生成 SQL.

自动映射对象属性到准备好的语句参数,提供结果集到对象的自动映射

没有透明持久对象

MyBatis提供针对数据库操作的交易管理,如果没有其他的交易管理器可用的话。MyBatis可以使用外部交易管理,比如Spring, EJB CMT等。

不了解对象身份


    下 面总结一下:MyBatis主要针对SQL环境,即便SQL查询面临微调,但MyBatis仍然有用。MyBatis不应该用于既有应用程序又有数据库设 计的环境中,因为这样的用例中,需要修改应用程序适应数据库,反之亦然。在这种情景下,你应该构建一个全对象-关系的应用程序,也可以选择其他ORM工 具。

什么时候应用程序使用MyBatis缓存?

    对这个问题的回答是:当你的应用程序 在短时间内,对数据库中的大数据集反复提出访问要求的时候。缓存并不是只针对大数据应用的,虽然数据量很重要,并且影响着应用程序的性能,但是缓存的出现 主要是满足数据被频繁地刷新的需求。如果你要访问的是不会改变“值”的大规模数据集,那么你不需要访问数据库,你只需访问中间层(缓存层)就可以了。一定 要记住,数据库操作是要耗费时间的,而每一毫秒对高性能应用程序来说都很重要。

为什么缓存要使用第三方库?

    第三方库具备多种优势:缓存曾的单独价值的最大型号远大于默认的,提供不同锁定模型,一些允许和其他编程语言集成,提供map-reduce机制等等。

    教程要求:

  •  Java SE 1.6 或更高
  •  一个 IDE
  •  Maven 2.0 或更高
  •  一个web应用程序服务器

    下面是应用程序的概览,为了能够注入到它们的EJB组件中,每一个EJB项目都依赖整个项目):

    IDE概览和架构高级概览:

    CacherPoc项目展示了可能被部署和回顾的行为。下面是创建CacherPoc应用程序时需要的一些步骤:

    1. 创建新的Maven Web应用程序并将它命名为CacherPoc

view sourceprint?1.<dependency>2.<groupId>log4j</groupId>3.<artifactId>log4j</artifactId>4.<version>1.2.17</version>5.</dependency>

    2. 为pom.xml配置log4j库:

view sourceprint?1.<a href="EhCacheServlet?action=listEmployee" >2.Show All Employee Items with EHCache3.</a>

    3. 在 index.jsp文件中 (项目默认创建的) 你需要给每一个servlet添加链接链接,Servlet会从我们的样本ejb项目中注入EJB(EhCachePoc, HazelCastPoc, OSCachePoc and MemcachedPoc) :

     view sourceprint?01.@WebServlet("/EhCacheServlet")02.public class EhCacheServlet extends HttpServlet {03. 04.private static Logger logger = Logger.getLogger(EhCacheServlet.class);05. 06.private static final String LIST_USER = "/listEmployee.jsp";07. 08.@Override09.protected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {10.String forward = LIST_USER;11.List<Employee> results = new ArrayList<Employee>();12.req.setAttribute("employees", results);13.RequestDispatcher view = req.getRequestDispatcher(forward);14.view.forward(req, resp);15.}16. 17.}

    以下展示的是上文提到的servlet的例子:

    这样,缓存层的一切就都设置好了。





收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款