[Brave]请教数据懒加载的具体实现技术

03-11-27 Brave
对于数据的懒加载,在某些对象关系条件下、大数据量情况下对性能是有影响的。那么,懒加载的根本思路就是“数据在需要的时候才进行加载”。我希望在我的 Brave 系统里面支持数据的懒加载。原来的考虑是不完整的和不好的,我的思路如下:

在数据值对象中,对于关系属性(通常是集合类型)的 get 方法,在调用该方法的时候作判断:如果关系数据没有初始化,那么就调用相关的数据加载方法加载她(通常是通过DAO)。但这里有几个严重的问题:

1:数据值对象通常是简单的对象,调用数据访问方法破坏了她的简单性,虽然是以“客户程序员看不到”的方式进行的;

2:数据值对象通常是需要网络传输的,也就是通常是需要序列化的,那么数据访问方法的引入,增加了需要序列化的工作,同时,这些东西是不必要的。

所以,这种做法是否定了的。目前的做法(想法)是考虑关系,但是关系数据不进行预先载入,也不是系统机制自动完成的,而是客户程序员调用相关的方法自己完成的,也就是,对于存在复杂关系的对象的值的载入可能是多个步骤的,而这些步骤可能来自不同的对象不同的方法。

更好的,我可能是希望是系统自动化完成的,也就是我最初的想法是系统自动的完成的。但是,我的水平还不够,我不会 对象方法的拦截和自动化的载入(动态的或者静态的,但这些概念不是很清楚,涉及到了AOP等吧??)。这些技术可能涉及到动态代理的实现,但是,我没有做过对于产品不是好的选择,也稍微破坏了系统简洁的定位,所以希望大家给我一些意见和看法。

Brave
2003-11-29 03:40
[Brave]请教数据懒加载的具体实现技术

iceant
2003-11-29 15:21
如果我没理解错的话,你是指一个对象的属性|相关数据,在需要的时候才从数据库里取出来,平时就只保留一个 index id?

如果是这样我觉得要权衡一下,会不会因为引入这样的机制反而增加了网络或方法调用等其它方面的成本?系统会不会因此变慢?

我觉得你的想法很好~~ 但是要做很多测试~~

Brave
2003-11-29 17:44
不错,你说得对,我指的就是“指一个对象的属性|相关数据,在需要的时候才从数据库里取出来。”,很多人容易误会和缓冲技术的关系。:)

robbin
2003-11-29 20:25
建议你研究一下Hibernate的源代码中Collection部分,就是用了实现lazy loading的。Hibernate的lazy loading很灵活。

猜你喜欢
2Go 1 2 下一页