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

日期: 2014-11-30 作者:ammbra翻译:Eunice 来源:TechTarget中国 英文

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 EHCache
3.</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的例子:

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

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

ammbra
ammbra

翻译

Eunice
Eunice