1

appengine java sdk 1.6.4.1 数据核 jpa2.0.0 数据核缓存 3.0.1

大家好

我正在使用 DN 缓存级别 2 插件。

<property name="datanucleus.cache.level2.type" value="javax.cache"/>
<property name="datanucleus.cache.level2.cacheName" value="xxxxx"/>

我注意到直接查询存在性能问题。

Query query = em.createQuery("Select m.key from MessageUser m "
                + "where " + " m.userKeyList = :userKey "
                + "AND m.date > :date ORDER BY m.date DESC");

缓存开启时,它在 1159 毫秒内执行,缓存关闭 86 毫秒。

有什么明显的错误。从 appstats 跟踪缓存版本正在以串行方式从 memcache 中检索每个实体。

关于这是预期的还是我塞满的任何解释?

缓存关闭

(1) 2012-04-12 06:19:38.737 "GET /timeline/status?id=49001&sincedate=1333485300" 200  real=86ms api=0ms overhead=0ms (6 RPCs) 

@11ms datastore_v3.RunQuery real=10ms api=241ms
@31ms datastore_v3.Get real=7ms api=208ms
@4ms datastore_v3.BeginTransaction real=4ms api=0ms
@52ms datastore_v3.Get real=7ms api=8ms
@65ms datastore_v3.Get real=4ms api=0ms
@78ms datastore_v3.Commit real=4ms api=0ms 

缓存开启

9) 2012-04-12 05:54:24.385 "GET /timeline/status?id=49001&sincedate=1333485300" 200 real=1159ms api=0ms overhead=0ms (109 RPCs) 
@13ms datastore_v3.RunQuery real=12ms api=241ms
@28ms memcache.Get real=2ms api=0ms
@33ms memcache.Get real=2ms api=0ms
@37ms memcache.Get real=3ms api=0ms
@42ms memcache.Get real=2ms api=0ms
@47ms memcache.Get real=2ms api=0ms
@50ms memcache.Get real=2ms api=0ms
@54ms memcache.Get real=2ms api=0ms
@57ms memcache.Get real=2ms api=0ms
<repeat this for another 50 or60 times
@3ms datastore_v3.BeginTransaction real=4ms api=0ms
@1126ms datastore_v3.Get real=5ms api=8ms
@1134ms memcache.Get real=3ms api=0ms
@1139ms memcache.Get real=2ms api=0ms
@1143ms datastore_v3.Get real=4ms api=0ms
@1153ms datastore_v3.Commit real=3ms api=0ms 

迭代实体列表的代码

List<Message> list = messageDAO.findSinceDate(userKey, sinceDate);

JSONArray jsonList = new JSONArray();

for (Message message : list) {
item.put("id", message.getKey().getId());
    item.put("name", message.getName());
}
4

1 回答 1

0

查询缓存可能只缓存结果集的实体键。然后在访问实体时查找实体本身。

以下是有关查询缓存以及它们如何实际降低性能的更多信息。它是关于 Hibernate L2 缓存,但 datanucleus 实现可能是相似的。 http://tech.puredanger.com/2009/07/10/hibernate-query-cache/

于 2013-02-16T22:05:59.613 回答