用 SimpleDS 解决 Google AppEngine 的持久层
Posted by:chszs Posted on: May 05 2010
SimpleDS 为 GAE ( Google App Engine )提供了一个极其简洁的持久化框架。它仅仅是在数据存储 API 上封装了一层,提供了实体和 Java 类之间的映射。
GAE 提供了一个非常强大的服务功能,可以在云上持久化数据,但是它本身提供的 API 来处理持久化则显得很麻烦:
·数据存储 API 太面向底层了,直接暴露出映射样式的结构;
· JDO 和 JPA 的 API 对于完成简单的任务来说,过于复杂,而且为关系数据库增加了大量额外的检查设计影响了性能。
SimpleDS 的最新版本为 1.0 RC1 ,它提供了以下功能:
·支持一级缓存、二级缓存;
·后台任务突破了 GAE 的 30 秒限制;
·优化功能:通过把 n +1 次查询转换成两次查询,与缓存进行组合使得性能提高;
·可使用 SimpleDS 注释或 JPA 注释进行驱动的配置;
·支持内嵌类;
·支持‘ == ’,‘ < ’,‘ <= ’,‘ > ’,‘ >= ’,‘ IN ’,‘ != ’,‘ like ’等操作符;
·支持分页查询和游标;
·支持事务处理等。
处理实体的例子:
-
-
Model m1 = entityManager.find(Model.class, key);
-
Model m2 = entityManager.find(Model.class, key2);
-
-
Model m1 = entityManager.get(key);
-
List l = entityManager.get(key1, key2);
-
-
entityManager.merge(m1);
-
entityManager.persist(m2);
-
-
entityManager.put(m1);
-
entityManager.put(l);
-
Model m3 = new Model();
-
entityManager.put(parentKey, m3);
-
-
Model m1 = entityManager.find(Model.class, key);
-
entityManager.remove(m1);
-
-
entityManager.remove(key1, key2, key3);
查询的例子:
-
-
Query query = entityManager.createQuery(
-
"select m from Model m where m.createdAt<=?1 and m.createdBy=?"
-
);
-
query.setParameter(1, new Date());
-
query.setParameter(2, userKey);
-
return query.getResultList();
-
-
SimpleQuery query = new SimpleQuery(Model.class)
-
.lessThanOrEqual("createdAt", new Date())
-
.equal("createdBy", userKey);
-
return entityManager.find(query);
-
-
entityManager.find(query.keysOnly());
-
-
entityManager.find(query.withOffset(10).withLimit(100));
阅读(1205) | 评论(0) | 转发(0) |