关于缓存与数据查询次数的问题

06-09-08 peizi_tzy
    

banq(彭)大哥:在你写的《JAVA实用系统开发指南》里学到蛮多东西,谢谢啦

banq大哥:

现在检索数据是先查IDs,再到cache中找model,找不到再到数据库里找

Hibernate: select message0_.messageId as messageId0_, message0_.name as name0_ from testmessage message0_ where message0_.messageId=?

这是message例子打出来的sql语句,我在想是不是有更好一点的办法,减少第一次获取数据时的数据库访问次数呢,我不知道hibernate是怎么管理connection的,如果是我的话,肯定查一次会建立一起连接,再关一次,这样企不是很浪费啊

还有就是现在限定只有每页最多显示200条,如果我想要更多呢,比方说一页全部显示,这样的需求到处都是啊

另外再请教一个问题,model的设计你说是一个表对应一个model,在某些情况下我不需要那么多字段,比方说一个用户表,50几个字段,在用户检索的时候我只需要不到10个字段的内容,并且同时用到所有字段的情况很少,有的话也是对极个别用户信息进行编辑的时候才会,可用户检索的时候甚至会把所有用户的数据全部放到缓存里,蛮浪费的啊,里面放的数据可能有一多半不会用到,如果设计成两个model的话,那怎么缓存啊,要实现字段级的缓存吗?

    

peizi_tzy
2006-09-08 10:37

我现在用的服务器是oc4j,数据库是sqlserver

想研究一下JF的源代码,昨天才把源码down下来的

以后会是这里的常客的,呵呵,请多多指教:)

Performance(良好的性能):Jdon框架提供强大缓存功能,无需编程,在自己的系统中加入Jdon框架后,自动提升了每个应用系统的运行性能,特别是批量查询性能。对Model数据通过缓存拦截器提升性能;对POJO无态服务使用对象池拦截器;也实现了POJO的有态服务拦截器。

这里的有态,会包括哪些状态啊,你可不可以举些例子吧,我看得不是很明白,POJO服务有保存状态的必要吗?

麻烦你了banq大哥

banq
2006-09-08 12:12

难道你这样忠诚的“追随者”,这些都鞭策我继续把这条路走好,不能浪费你们的宝贵时间。

》我不知道hibernate是怎么管理connection的,如果是我的话,肯定查一次会建立一起连接,再关一次

这里都用了Pool模式,数据库连接池,关闭连接其实是将一个连接放回Pool,不是真正关闭。

>model的设计你说是一个表对应一个model

我这是方便一些初学者从数据表思路转换到模型设计思路,实际并不是这样对应的,因为我们已经不必考虑数据表和Model关系,由ORM来实现即可,我们关心的是对象。

一般字段超过20个以上,就说明需要重构设计这个模型了。细分你的模型对象为多个,当然多个模型对象可以存储在一个大表里,这些都是由ORM配置策略决定。

>如果设计成两个model的话,那怎么缓存啊,要实现字段级的缓存吗?

千万别字段级别缓存,否则缓存效率很差。 到这里,估计你要学学聚合等DDD建模设计概念了,两个Model是聚合在一起,一个是整体;一个是部分。如果我缓存了整体,当然部分也缓存了,这就是模型对象的一致性和不变性。

banq
2006-09-08 12:16

》这里的有态,会包括哪些状态啊,你可不可以举些例子吧,我看得不是很明白,POJO服务有保存状态的必要吗?

按照Evans DDD理论,服务应该是无态的,但是按照MF他们的PoEAA,应该由服务状态server session这样机制存在,我就学习EJB的有态Session Bean,创造了一个有态服务。

还是以购物车为例子,购物车是业务功能,应该在业务层实现,JF作为业务层容器,提供了有态服务这个机制实现购物车,使用EJB也是;如果使用Spring,则没有现成提供,需要自己完成,难度大,要不就跑到表现层从HttpRequest中获取HttpSession保存购物车,那业务层的功能跑到表现层实现,这叫层泄漏,违背分层架构原理。

peizi_tzy
2006-09-08 13:30

基础太差了,我刚本科毕业,在一家做外包的公司上班

DDD,PoEAA等都没听过

你很忙,等把你回的这个贴子看懂了再继续“拷问”你!

呵呵!

谢谢你了,banq大哥!