`
aa87963014
  • 浏览: 154418 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

FreyjaJdbcTemplate特性二:cache

 
阅读更多

在使用hibernate开发过程中,让我一直感到奇怪的是为什么缓存是如此的让人不顺心。对于update操作频繁的项目更是噩梦。这和我对缓存的理解有很大的出入。

我的想法有2点:

1、数据库是大海,缓存是池塘。如果我抓了4条鱼到池塘里面去,为什么我一直要做这么一件事情:把鱼抓到池塘里面过一段时间又放回大海,过一段时间又抓到池塘里面去。这样真傻。还有一个诡异的问题,鱼被抓到池塘里面了,大海里面的鱼是哪来的?

 

2、如果我要抓所有的鲶鱼,难道我只去池塘抓?如果我怎么才能知道池塘的鱼是不是就是所有的鲶鱼了,这个时候必须去大海里面再捞一捞。必须去大海里面一次又一次的捞?要池塘又是干嘛的?

 

 

freyja的做法:

 

1、在freyja里面鱼只有一条,要么在池塘要么在海里面。freyja用hashMap来管理缓存(ehcache)

2、get方式获取到的都是优先缓存内的值,取不到才会去发送sql并且放入cache中。

find()方法会发送sql去查找id,然后遍历缓存,如果缓存中存在者返回缓存中的值,否则取数据库中的。

executeUpdate()方法会直接update数据库,并且会select id 找出涉及到的表的id然后用el工具更新缓存中的值。来维护缓存。

 

将要实现的cache能力:

3、第一次发送sql会查询出一个记录集,第二次发送sql着直接取缓存中的内容。难点是,如果其中一条记录的条件变化,如何完成这个处理?我的想法是一条记录保存所有缓存他得key,一旦update操作则让其缓存失效(这个是简单做法,复杂做法是根据条件再次判断是否让缓存失效。)

 

4、(这是我最喜欢的一个功能)no update。

这个功能的特点就是在update(user)的时候不会去发送sql update数据库。也就是第一点所说的,鱼在池塘就不去理会大海。这个功能的思路大概有了,正在施工中。但是工作量很大,而且效率怎么样不得而之。总之,这是自寻死路。

 

对于现在的freyja来说不支持分布式,也许以后会去考虑,一旦支持了分布式那么我的第一个理念就有出入了。

 

其实还有最大的一个问题:事务

http://freyja.iteye.com/blog/1178182

 

事务的特性就是为了让一个人不要在看书的时候听音乐。因为同时做2件事的时候容易出问题。事务还是很有存在的必要的,但是freyja的结构让事务失去了作用。只有一个对象的freyja可以在事物里面的数据被事物外的数据修改。

 

freyja对事物的处理是,在get()实体的时候根据事物的id为key把结果集放入一个map作为副本,在出错的时候”回滚“,事物结束的时候remove key。这部分还在完善中。

 

在简单的测试中,hibernate一级缓存情况下的select update 操作freyja和hibernate效率相当。(因为freyja本身就是一个大的一级缓存)。但是到了重要的二级缓存里面hibernate和freyja没有可比性了。

 

如这么一个测试:@Test

	public void testFind() {
	
		
		long l1 = System.currentTimeMillis();
		for (int i = 0; i < 2000; i++) {
			userService.testFind();
			}
		long l2 = System.currentTimeMillis();
		System.out.println("freyja find() 5000个对象耗时:" + (l2 - l1) / 1000);
	}

public void testFind() {
		for (int i = 0; i < 10; i++) {
			List<User> list = baseDAO.find(User.class, "level < ?", i);
		}
	}

 

 

模拟二级缓存环境,数据源用的是同一个,hibernate的二级缓存开启查询缓存关闭(难道开启会好点?)

 

 

hibernate find() 5000个对象耗时:11 (500*10)

hibernate find() 5000个对象耗时:20 (1000*10)

hibernate find() 5000个对象耗时:40 (2000*10)

 

freyja find() 5000个对象耗时:7 (500*10)

freyja find() 5000个对象耗时:13 (1000*10)

freyja find() 5000个对象耗时:25 (2000*10)

 

分别是2000调用、1000次调用和500次调用。User表里面有5000条记录,level为1-5000;

 

这个差距大概体现在hibernate每次从缓存中提取结果需要序列化的原因。

 

还是等完全施工完毕再全面的系统测试一次比较好。

 

那个时候hibernate有它的一套完备的体系,freyja则有自己的原生sql+cache支持。

 

FreyjaJdbcTemplate特性一:HQL 

 

FreyjaJdbcTemplate特性二:cache

 

FreyjaJdbcTemplate特性三:JdbcTemplate 

 

 

2
3
分享到:
评论
3 楼 cainiao1923 2012-08-15  
支持下!!!!!!!!!!!!!!!!!!!!!!!!!!
2 楼 aa87963014 2011-12-13  
等最后出来的时候 大家就能看到freyja有多强大了
1 楼 bitray 2011-12-13  
关注度太低了,属于楼主自娱自乐?还是打算搞成新的项目?

相关推荐

    cache-api-1.1.1-API文档-中文版.zip

    Maven坐标:javax.cache:cache-api:1.1.1; 标签:javax、cache、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    Lab #8: Cache

    【标题】:“Lab #8: Cache” 在计算机科学领域,Cache是硬件层面的关键技术,用于提升数据存取速度。此实验“Lab #8: Cache”旨在深入理解和掌握Cache的工作原理及其对系统性能的影响。在本实验中,我们将探索...

    Memory System_cache_dram_disk

    存储器系统是计算机硬件的重要组成部分,它负责存储和管理数据及指令,以便CPU能快速访问。本主题将深入探讨三个关键层次的存储器:Cache...理解这些层次的特性和交互对于系统设计、性能优化和问题排查都具有重要意义。

    实验四:Cache性能分析

    【实验四:Cache性能分析】 本实验主要目的是深入理解Cache的工作原理,以及其容量、相联度、块大小等因素如何影响性能。实验中,我们利用SimpleScalar模拟器,通过一系列参数调整来研究Cache的失效机制。 1. **...

    Oracle Cache Fusion 原理介绍

    Oracle Cache Fusion 原理介绍 Oracle Cache Fusion 是 Oracle Real Application Clusters(RAC)的一种高级技术,旨在提高集群环境中的数据块传输效率和可靠性。 Cache Fusion 可以实现在集群中的数据块高速传输、...

    计算机系统结构:模拟实验三:Cache性能分析.ppt

    本实验的主要目的是为了加深对 Cache 的基本概念、基本组成结构以及基本工作原理的理解,了解 Cache 的容量、相联度、块大小对 Cache 性能的影响,掌握降低 Cache 失效率的方法,了解 Cache 失效的产生原因,理解 ...

    cache-api-1.1.1-API文档-中英对照版.zip

    Maven坐标:javax.cache:cache-api:1.1.1; 标签:javax、cache、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    Memory Systems - Cache, DRAM, Disk

    内存系统分为几个层次,包括高速缓存(Cache)、动态随机存取存储器(DRAM)和磁盘存储。每层都有其独特的特性和功能,并且在整个存储体系中扮演着各自的角色。 缓存是计算机内存系统中最接近CPU的部分,它用于临时...

    Cache的特性和工作原理.docx

    - **JBoss Cache**:功能强大的Cache实现,支持多种特性,包括分布式Cache、多级Cache和集群支持,提供锁和事务处理。 **memcached的特性** - **多语言客户端API**:提供多种编程语言的客户端接口,方便不同环境下...

    实验四:Cache控制器设计1

    实验四“Cache控制器设计1”主要目标是让学生理解和掌握Cache控制器的工作原理以及设计方法,同时通过实际编程实现Cache控制器的功能。在这个实验中,学生需要编写各个子模块的代码,并进行测试,确保Cache控制器能...

    CGI::Cache-开源

    在CGI-Cache-1.4200这个版本中,可能包含了一些新特性、改进或修复的bug。具体细节需要查看模块的文档或变更日志来了解。为了使用这个模块,开发者需要具备一定的Perl编程基础,理解如何在CGI脚本中引入和配置CGI::...

    jdbc连接cache的demo及jar包,自己备份.rar

    2. InterSystems Cache:Cache是一个高性能、实时的多模式数据库,支持对象-关系数据模型,常用于构建高性能的应用系统,如电子健康记录和金融服务。 3. JDBC连接Cache:使用JDBC连接Cache数据库需要引入特定的JDBC...

    File::Cache-开源

    File::Cache 是一个 perl 模块,它允许通过文件系统跨进程共享对象数据。 现在不鼓励使用 File::Cache,而是支持 http://sourceforge.net/projects/perl-cache/ 上的新 Cache::Cache 项目。

    Memory System- Cache, DRAM, Disk

    - **DRAM的工作原理**:DRAM通过改变电容器上的电压来表示二进制位(0或1)。为了保持数据,需要定期给电容器充电,这一过程称为刷新。 - **DDR技术**:DDR(Double Data Rate)是DRAM的一种常见形式,它可以在每个时钟...

    CACHE技术手册,强烈学习

    #### 二、CACHE的关键特性 - **多值存储(MultiValue)**:CACHE支持多值存储模型,这种模型允许在一个记录中存储多个值,非常适合快速访问和处理大量数据。 - **全局变量(Global Variables)**:这是CACHE的一个独特...

    计算机系统基础:Cache替换算法和写策略单元测试与答案.docx

    在计算机系统中,缓存(Cache)是一种用于提高数据访问速度的技术。它通过存储最近频繁使用的数据,减少了处理器等待主存响应的时间。本单元测试主要涉及了Cache的替换算法和写策略,这些都是优化计算机性能的关键...

    北交计算机体系结构Cache实验报告

    1. Cache 模拟器使用 newarray 二维数组模拟 Cache 2. 在直接映射和全相连映射中,newarray[index][0] 用来表示 Cache 中 index 对应记录的有效位,newarray[index][1] 代表 Cache 中 index 对应记录的 tag 字段 3. ...

    等待事件row cache lock,latch row cache objects处理过程.txt

    等待事件row cache lock,latch row cache objects处理过程

    Cache数据库表及其Global结构的查看.pdf

    从提供的文件内容来看,我们可以提取以下关于Cache数据库的知识点: 1. Cache数据库基础概念:Cache是InterSystems公司开发的一个高性能的对象数据库,适合处理大量数据和复杂数据结构,通常用于医疗、金融等行业的...

Global site tag (gtag.js) - Google Analytics