我有一个疯狂的想法:使用Redis作为休眠的第二个缓存级别.Redis是一个内存数据存储区,它支持复制,管道等.目标是在许多tomcat节点之间共享hibernate缓存.基本实现应该是将Hibernate缓存对象键和值进行搜索并将所有内容存储到Redis数据库中.你怎么看待这个想法?
最好的祝福,
朱利叶斯
我在spring-hibernate-transaction问题上花了几天时间.我使用jaxws + spring + hibernate创建一个简单的web服务,它工作正常但是当我调用使用事务bean spring的web方法时抛出以下错误:
21 sept. 2011 14:29:29 com.sun.xml.ws.server.sei.EndpointMethodHandler invoke
GRAVE: org.hibernate.HibernateException: createCriteria is not valid without active transaction
Run Code Online (Sandbox Code Playgroud)
我似乎交易已经开始......但是发生了一些错误.
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Creating new transaction with name [com.cellfish.mediadb.ws.encoder.MediaDBFeeds.testTransaction]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Opened new Session [org.hibernate.impl.SessionImpl@26b20a31] for Hibernate transaction
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - Preparing JDBC Connection of Hibernate Session [org.hibernate.impl.SessionImpl@26b20a31]
[jmedia] 21 sept. 2011 14:29:29 [http-8080-1] DEBUG org.springframework.orm.hibernate3.HibernateTransactionManager - …Run Code Online (Sandbox Code Playgroud) 我在Tomcat服务器上部署了一个简单的webapp.webapp是一个REST Web服务,每个Web资源从MySQL数据库加载数据并返回XML或JSON文档.我使用以下框架堆栈:Jersey(1.14)+ Spring(3.1)+ Hibernate(4.1)+ EHCache(2.5.1).
我用jMeter测试了webapp:我启动了5个线程来请求Web资源.几分钟后,堆已经开始缓慢填充达到99%并最终返回OOM异常.我不知道它是否是内存泄漏但是当我org.hibernate.hql.internal.ast.tree.SqlFragment在内存堆中看到大量对象时?!!
/usr/java/jdk/bin/jmap -histo:live 17047 > /tmp/histo.txt
num #instances #bytes class name
----------------------------------------------
1: 720143 69133728 org.hibernate.hql.internal.ast.tree.SqlFragment
2: 510537 63559320 [C
3: 360221 34581216 org.hibernate.hql.internal.ast.tree.BinaryLogicOperatorNode
4: 704652 33823296 java.util.HashMap$Entry
5: 360223 31699624 org.hibernate.hql.internal.ast.tree.SqlNode
6: 697354 27894160 java.lang.String
7: 370975 26710200 org.hibernate.hql.internal.ast.tree.Node
8: 171241 25623320 <constMethodKlass>
9: 208125 24948176 [Ljava.lang.Object;
10: 171241 20568632 <methodKlass>
11: 16012 17827384 <constantPoolKlass>
12: 383070 16623136 [I
13: 34829 15170176 [Ljava.util.HashMap$Entry;
14: 226869 12885896 <symbolKlass>
15: 16012 12590168 <instanceKlassKlass>
Run Code Online (Sandbox Code Playgroud)
这里是我的jvm选项: …
我在mysql(innodb)上有一张大桌子,其中包含产品资产(1300万行)。这是我的数据库的一些架构:
product <-many2one-- file_item --one2many--> family --many2one--> download_type
Run Code Online (Sandbox Code Playgroud)
* file_item *表是具有数百万行的大表。我尝试使用以下sql查询按下载类型对产品进行计数:
select t.name as type,
count(p.product_id) as n
from file_item p
inner join family f on f.id = p.family_id
inner join type t on f.id_type = t.id
group by t.id order by t.name;
Run Code Online (Sandbox Code Playgroud)
* file_item *表上有3个索引:
+ ---- + ------------- + ------- + -------- + ------------- ---------------------- + --------- + --------- + ------- ------------ + ---------- + -------------------------- ------- + | id | select_type | 桌子| 类型 …