阅读更多

12顶
3踩

企业架构

原创新闻 guzz1.2.6发布,支持blob/clob

2010-01-29 11:57 by 正式记者 myreligion 评论(12) 有7345人浏览
guzz是一套用来解决ORM、多数据源数据管理、以及通用数据处理的数据层框架,为系统在数据层的设计提供一站式解决方案。guzz可以看作是 ibatis/hibernate的一大的延伸,并可以取代这2个东西。

Guzz特点:
   
  • 现代大规模系统设计,技术上吸收了ibatis/hibernate的优点
  •    
  • 支持像hibernate一样的对象持久、映射和方便的增删改查
  •    
  • 支持像ibatis一样,让dba参与sql设计的复杂数据库操作和优化
  •    
  • 支持应用使用大量的数据库和主从读写分离
  •    
  • 支持关联、非结构化等异构数据统一管理
  •    
  • 支持数据表在多组机器间水平分布(Shard)
  •    
  • 支持组件化服务(SOA),构建企业/项目实施基础平台
  •    
  • 支持页面展示层的快速变更、开发及部署
  •    
  • 支持配置管理服务器,对所有应用程序的配置进行统一管理

项目地址:[url] http://code.google.com/p/guzz/ [/url]

1.2.6更新介绍:

  • 支持byte, decimal,blob/clob等数据类型
  • 提供大型blob/clob的自定义属性Loader,用于应用自己控制blob/clob的扩展处理
  • 支持在更新对象或对象某一个属性(有单独api)前加入行写锁。
  • fix some bugs.

Blob/Clob应用示例说明:

假设有一个用户信息扩展表,里面存放用户头像图片数据和无限制大小的自我介绍。分别设计为blob和clob字段存储。下面的例子重点介绍blob使用,clob类似。

领域对象定义:

public class UserInfo {
	
	private int id ;
	
	private String userId ;
	
	private TranClob aboutMe ;
	
	private TranBlob portraitImg ;
    //get&set methods

其中TranClob和TranBlob为guzz对Lob的一层封装。可用于在lazy load时释放lazy load获取的数据库资源。Guzz的lazy处理没有hibernate的OpenSessionInView尾巴,因此对于因lazy而临时获取的资源需要自己关闭。

配置对象映射(以头像图片为例):

        <property name="portraitImg" type="blob" column="portraitImg" lazy="true"></property>    

应用实现blob的插入:

FileInputStream fis = new FileInputStream(“a big file.png”) ;
		
		WriteTranSession tran = tm.openRWTran(false) ;		
		
		try{
			UserInfo info = new UserInfo() ;
			info.setUserId("lucy") ;
			info.setPortraitImg(Guzz.createBlob(fis)) ;
			tran.insert(info) ;

			tran.commit() ;
		}catch(Exception e){
			tran.rollback() ;			
		}finally{
			tran.close() ;
fis.close() ;
}

更新:对于Oracle数据,插入Blob需要先插入空,在更新,下面代码说明如何将图片存入Oracle库:
FileInputStream fis = new FileInputStream(“a big file.png”) ;
		
		WriteTranSession tran = tm.openRWTran(false) ;		
		byte[] tb = new byte[1] ;
		tb[0] = 1 ;
		try{
			//先插入一个空的
			UserInfo info = new UserInfo() ;
			info.setUserId("lucy") ;
			info.setPortraitImg(Guzz.createBlob(tb)) ;
			tran.insert(info) ;
tran.commit() ;
			//再读取进行更新,读取时自动获取行锁
			TranBlob blob = (TranBlob) tran.loadPropForUpdate(info, "portraitImg") ;
		blob.truncate(0) ;
		blob.writeIntoBlob(fis, 1) ;
		tran.commit() ;
		}catch(Exception e){
			tran.rollback() ;			
		}finally{
			tran.close() ;
fis.close() ;
}
 

显示:存入数据库以后,设计了一个jsp页面,用来读取并显示用户头像(大致步骤)。

<%@page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.guzz.org/tags" prefix="g" %> 

<!-- 根据参数uid读取用户信息 -->
<g:get business="userInfo" limit="userId=${param.uid}" var="m_userInfo" />

<%
UserInfo info = (UserInfo) page.getAttribute("m_userInfo") ;

//获取Blob字段。此处为lazy读取,会打开一个从数据库连接,读取blob字段。
TranBlob img = info.getPortraitImg() ;

//将blob数据写入到JSP页面输出中
img.writeOut(out) ;

//关闭lazy读取时申请的数据库连接
img.close() ;

%>

大功告成。在整个过程中,写入和更新类似于hibernate,但读取与展示这类最可能遇到需求变来变去的东西,与其他框架相比能节省大量的编码和部署工作(JSP不需要重启)。

下一版本1.2.7开发计划:

  • 提供表分切支持。允许同一对象按照业务规则,分别存储在不同的表中,guzz提供统一管理。如新闻评论:新闻频道的评论存放在tb_c1,娱乐:tb_c2,体育tb_c3,其他:tb_c4,满足同类在线数据的数据表平行扩展需要。表分切技术命名为:ShadowTable
  • 支持远程服务未来读取结果功能。用于支持多个远程服务可以同步的调用。详细介绍可以参看:org.guzz.service. FutureResult中的代码注释。
  • 其他新发现的bug和有价值功能.
12
3
评论 共 12 条 请登录后发表评论
12 楼 天机老人 2010-02-01 20:30
特别是互联网项目,因为互联网项目需要不断推倒重新做,不断的推陈出新!
11 楼 天机老人 2010-02-01 20:30
不过我对这个项目非常感兴趣,因为我喜欢这种有积累的工作方式。这样子,项目会越开发越快!
10 楼 myreligion 2010-02-01 09:40
terryzhou 写道
http://www.guzz.org/网站挺顺眼.
文档看了下,亮点还是有的.不过吸引力有限.
现在后台的框架普遍基本都是Spring+ORM,个人感觉怎样快速开发view端才是关键.


我非常认同“个人感觉怎样快速开发view端才是关键.”,我就被这个郁闷了很久。以前曾经花了将近大半年时间思考我们一个互动产品怎么实施的问题。互动的定制性太强,产品默认的样子客户根本不要(毕竟人家也花了不少钱买的),最后觉得还是jsp taglib或者将页面展示存储到数据库中的freemarker模板能够解决问题。

其中jsp taglib对实施人员要求低些,这也是guzz设计数据库taglib的原因。guzz的数据库taglib就是用来解决view快速开发的,这类简单的读取操作不用搞多层模型。

guzz的数据分切,主从,以及自定义属性都与之兼容,用于解决直接数据库读取可能遇到的性能瓶颈。而接下来,还将设计缓存的taglib,和现有taglib配合,解决缓存需要。
9 楼 javaonejcy 2010-01-31 18:13
据我所知hibernate是一个比较完整的持久层外观,要达到这种程度要解决的问题非常多所以也非常复杂,hibernate3就有超过8万行的代码。要做他的延伸恐怕是不太容易的。另外,我认为大对象,批处理这种东西没有必要由ORM解决,把这些问题留给应用层也许会更好。另外就性能而言也不是所有数据库都用preparedstatement就是好。
8 楼 grandboy 2010-01-30 22:12
引用
支持数据表在多组机器间水平分布(Shard)


连接查询和统计怎么支持的,还是不支持?
7 楼 terryzhou 2010-01-29 22:05
http://www.guzz.org/网站挺顺眼.
文档看了下,亮点还是有的.不过吸引力有限.
现在后台的框架普遍基本都是Spring+ORM,个人感觉怎样快速开发view端才是关键.
6 楼 天机老人 2010-01-29 16:07
文档原来是在这边啊!http://www.guzz.org/
5 楼 myreligion 2010-01-29 16:07
天机老人 写道
哥们你这项目,没有说明文件,更要命的也没有一个对各个功能点写些小的文章!


http://www.guzz.org/
4 楼 myreligion 2010-01-29 16:06
lqixv 写道
看起来还不错,但不知性能如何。

性能的话不知道指哪方面,不过应该不会比别的差。

数据库操作都是:直接JDBC规范操作 + 数据库连接池。

其他的像sql语句的解析是内部缓存好的,preparedStatement执行,应该都差不多吧。
3 楼 天机老人 2010-01-29 16:06
也是开发就够累了,还别说写这个呢!
2 楼 天机老人 2010-01-29 16:06
哥们你这项目,没有说明文件,更要命的也没有一个对各个功能点写些小的文章!
1 楼 lqixv 2010-01-29 13:01
看起来还不错,但不知性能如何。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • guzz开发jar

    guzz是一套用来进行快速开发和高性能网站设计的java框架,通过ORM、多数据源数据管理、以及通用数据处理,为系统在数据层的设计提供一站式解决方案。用于替代或者补充hibernate或ibatis,并提供更多的大型系统架构...

  • mysql注解查询动态sql_数据层框架guzz1.2.8 正式版发布 支持注解与动态SQL

    guzz是一套用来解决ORM、多数据源管理、以及通用数据计算的数据层框架,为系统在数据层的设计提供一站式解决方案。guzz可以看作是 ibatis/hibernate的一大的延伸,并可以取代这2个东西。 guzz主要功能与特点: 现代...

  • guzz初始化时配置文件装载与解析过程分析

    http://code.google.com/p/guzz/wiki/TutorialConfig?wl=zh-Hans GuzzContext gc = new Configuration ( "classpath:guzz.xml" ). newGuzzContext () ;   //perform you actions......   ...

  • guzz1.2.8 beta2发布--支持动态加载在线调试SQL

    guzz是一套用来解决ORM、多数据源管理、以及通用数据计算的数据层框架,为系统在数据层的设计提供一站式解决方案。guzz可以看作是 ibatis/hibernate的一大的延伸,并可以取代这2个东西。 guz...

  • guzz的jar包

    guzz的jar包,工程下直接考过来的,可以直接使用

  • guzz 1.3.0大版本发布,支持Spring事务

    Guzz Spring事务支持标准Spring事务的所有配置,除了嵌套事务和JTA。嵌套事务Hibernate也不支持,如果需要使用,请按照hack Hibernate的方式使用。事务的配置方法为Spring标准配置方式,只需要将transact...

  • guzz1.2.7 beta1 发布,支持异步网络服务调用

    [size=medium]异步调用服务是指服务在执行的同时,不阻塞当前线程的继续执行,当服务的计算完成时,再返回给当前线程使用,实现并行计算。...guzz网站:[url]http://code.google.com/p/guzz/[/url] [/size]

  • guzz: a empty sample project build20110323.zip

    guzz的学习需要用的练习代码,有一个例子。

  • guzz的「Guzz」-crx插件

    为Guzz启用屏幕共享。 此扩展程序允许www.guzz.io用户共享桌面屏幕 支持语言:English

  • Guzz-crx插件

    语言:English 为Guzz启用屏幕共享 此扩展程序允许www.guzz.io用户共享桌面屏幕

  • Guzz源码分析(一) guzz容器初始化过程

    1. Guzz是什么? 百度Guzz http://baike.baidu.com/link?url=2ILIi8BXdhEUrVmVkYIDoYbehSN-jZ4F83iyJtNhl40zECi8_T7n_Br9acqJhKVhIdoxiyWh9sw2feqGJvq8la 2. 感觉Guzz的资料还是太少,但是还是有一篇很完整的帮助...

  • guzz

    [b]guzz[/b] http://code.google.com/p/guzz/ [b]guzz.group[/b] http://guzz.group.iteye.com/

  • guzz的批量增加的功能

    针对guzz的表分切与批量增加的应用 guzz的表切分功能,数据库表是需要提前建好的。 guzz对于单个记录的插入操作可以在插入之前设置 tableConditon. 例如: [code=&quot;java&quot;] WriteTranSession ...

  • Guzz源码分析(二) guzz解析guzz.xml

    1. 在上一篇文章分析了guzz初始化的大体流程,这里继续分析,主要分析在initFromMainConfig的方法中解析guzz.xml的过程 2. 首先在initFromMainConfig中找到下面的代码:   GuzzConfigFileBuilder builder = ...

  • 资料更新:http://www.guzz.org/

    所有资料以及资料更新转至:http://www.guzz.org/      

  • 咸蛋村小班C++扫盲课程 ----SGI STL 内存分配解析

     咸蛋村小班C++扫盲课程SGI STL 内存分配解析作者:狐狸发 void 小品(){       菜鸟咸蛋CY(简称CY)一路走一路哼哼唧唧:早上去上班,天天不迟到,小鸟说早早早,你为什么不穿小裤衩~~.各位观众,昨天咸蛋村遭遇了特大裤衩盗窃事件,很多村民的裤衩被盗,案情很严重,村民很生气,没办法,只好先去买裤衩了.       CY来到咸蛋村小卖部:老

  • 后入为主----虚函数

    后入为主                    ----虚函数作者:HolyFire说一个人后入为主,通常是说耳根子软,人家说什么就把原先的忘掉了,别人说向东走,他就向东走,一会儿有人说向西了,他立马赶回来。不过好处显而易见,这个人特别听话,如果你有时候不知道自己要干什么,或者不确定一会儿要干什么,那么就叫他在旁边等着,到你拿定主意的时候,再告诉他你的要求,让他照办。现实中这样的事情并

  • 白马非马----继承

    白马非马                   ----继承作者:HolyFire古人云:“白马非马”,为何如是说呢。这里有个讲究,白马是指一种白色的马,而非马里的马指的是各种各样的马,有黑马,棕吗,五花马等等,这是在颜色上有所区别,马还有产地,品种等等区别。这里给了我们一个启示,各种各样的马可以找出很多共同点,称之为马,符合这些特点的动物就是马了,所以这些共同点不能多也不能少,多了

  • 善事利器----面向对象的工具之牛刀小试

    善事利器                       ----面向对象的工具之牛刀小试作者:HolyFire首先先要介绍的是UML----统一建模语言,它是一种开放的标准建模语言,我要介绍的是它在类视图中的有关的部分,也就是UML中类的图示法。Rational Rose----使用UML的工具,可以在Rational公司的网站上免费得到,2000版的50M大小,获得它的连接是f

Global site tag (gtag.js) - Google Analytics