guzz 1.2.9 build20110511 更新介绍:
主要更新:
本次更新主要是解决一些bug,和调整一些设计不合理的地方。
同时感谢 高山流水 同学,提供了Maven的配置方式。maven配置方式:http://code.google.com/p/guzz/wiki/TutorialRuntime
计数失败回调服务
我们用一个例子来说明。在博客系统中,经常看到博文归档。也就是对老文章,首页只把曾经发表过文章的月份列出来,网友如果要查看,就点击月份来看这个月的文章列表。一般显示为“2009年7月(3篇);2007年4月(50篇)”之类的。现在我们要讨论的是,这个功能是如何实现的?最简单的办法,按照时间count group查询。
但对于大点的博客系统,为了提高性能,一般不会每次都用group查询,实时算出月份和文章数的统计列表。更一般的做法是,创建一个归档表,按照userId-年月-文章数记录每个月的文章发表数,每发表一篇,更新一下计数。显示时,直接单条件查询此表即可。
但这种做法,程序设计会比较复杂。每次更新时,都要先检查这个月的记录是否存在,如果存在就更新,如果不存在就先创建再更新。而且还带来了一个性能优化问题,复杂的逻辑使得计数操作无法批量处理。如果这类情况比较多,而且混合很多其他的计数,如文章评论数,新评论数,留言数,访问次数等等,在计数处理方面的设计就会非常复杂。
“计数失败回调服务”就是用来解决这类问题的。这个服务是guzz先前发布的计数器服务的补充。计数器服务允许程序同时对多个计数操作进行高性能更新,而“计数失败回调服务”允许计数表不需要提前生成计数项的记录,在第一次计数更新时,如果计数记录不存在,可以获得回调通知,临时创建。
例如上面说的文章归档,也只需要按照计数器服务调用一个方法记录下操作。在计数服务服务器端,实现“计数失败回调服务”。在执行更新时,如果计数服务发现要更新的记录不存在,会自动回调“计数失败回调服务”,程序临时创建即可。这使得程序设计既简单,同时又获得事务批量提交的性能优化,减少数据库的压力。
更多介绍请参看:http://code.google.com/p/guzz/wiki/AppendCoreService?wl=zh-Hans
其他主要更新:
1. 增加ExecuteService服务,使得多个异步调用服务可以共享同一个线程池。
2. 将Demon线程的检测更改为按照Thread.isDemon()判定。新版本中,只要线程为demon,不再需要线程名称必须包含特定开头字符串,即应用ignoreDemonThreadSQL的sql输出配置。
3. 修复了发现的bug。
4. 发布方式上,默认将源代码放到了guzz.jar中。如果不需要源代码放入,选择thin目录下class和source分开的guzz.jar包。
什么是guzz?
guzz是一套用来解决ORM、多数据源管理、以及通用数据计算的数据层框架,为系统在数据层的设计提供一站式解决方案。guzz可以看作是 ibatis/hibernate的一大补充和延伸,并可以取代这2个东西。
guzz主要功能与特点:
- 现代大规模系统设计,技术上吸收了ibatis/hibernate的优点
- 对于大部分场景,支持像hibernate一样的对象持久、映射和方便的增删改查,提高开发效率
- 对于复杂场景,支持像ibatis一样,让DBA参与SQL设计的复杂数据库操作和优化,以及SQL在线调试
- 更简洁、更好用、更容易控制的批操作接口
- 支持在线加载与调试SQL。按照应用策略,从文件/数据库/Web Service等途径,动态提取与使用SQL语句(Dynamic SQL)
- 支持应用程序使用大量的数据库和主从读写分离
- 支持数据库表在多组机器间水平分布(Shard),并自动维护多组机器之间的分布式事务
- 支持1张表按照业务规则分切成多张小表(Shadow),并支持每张小表拥有自己特殊的属性字段(Custom)
- 支持1张大表分切后的小表,分布到不同的数据库中(VirtualDB)
- 支持超越范式的特殊关联、非结构化数据等异构资源POJO模式的统一读取
- 支持组件化服务(SOA)和服务相互依赖,构建企业/项目实施基础平台
- 提供面向对象的数据库读取标签(JSP Taglib),加快页面展示层的快速变更、开发与部署
- 支持配置管理服务器,可以使用一套软件系统对所有应用程序的配置进行统一管理
项目地址:http://code.google.com/p/guzz/
文档:http://code.google.com/p/guzz/wiki/WikiHomePage?tm=6
下载:http://code.google.com/p/guzz/downloads/list
|