Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4113174
  • 博文数量: 626
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 11080
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-23 13:08
文章分类

全部博文(626)

文章存档

2015年(72)

2014年(48)

2013年(506)

分类: HTML5

2013-10-08 10:39:25

 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 ’等操作符;

·支持分页查询和游标;

·支持事务处理等。

处理实体的例子:


  1. // JPA retrieve by key  
  2. Model m1 = entityManager.find(Model.class, key);  
  3. Model m2 = entityManager.find(Model.class, key2);  
  4. // SimpleDS retrieve by key  
  5. Model m1 = entityManager.get(key);  
  6. List l = entityManager.get(key1, key2);  
  7. // JPA persist changes  
  8. entityManager.merge(m1);  
  9. entityManager.persist(m2);  
  10. // SimpleDS persist changes  
  11. entityManager.put(m1);  
  12. entityManager.put(l);  
  13. Model m3 = new Model();  
  14. entityManager.put(parentKey, m3);  
  15. // JPA remove  
  16. Model m1 = entityManager.find(Model.class, key);  
  17. entityManager.remove(m1);  
  18. // SimpleDS remove  
  19. entityManager.remove(key1, key2, key3);  


查询的例子:


  1. // JPA  
  2. Query query = entityManager.createQuery(  
  3.    "select m from Model m where m.createdAt<=?1 and m.createdBy=?"  
  4. );  
  5. query.setParameter(1new Date());  
  6. query.setParameter(2, userKey);  
  7. return query.getResultList();  
  8. // SimpleDS  
  9. SimpleQuery query = new SimpleQuery(Model.class)  
  10. .lessThanOrEqual("createdAt"new Date())  
  11. .equal("createdBy", userKey);  
  12. return entityManager.find(query);  
  13. // retrieve just keys  
  14. entityManager.find(query.keysOnly());  
  15. // with limits  
  16. entityManager.find(query.withOffset(10).withLimit(100));  


 

阅读(1199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~