论坛首页 编程语言技术论坛

Active Record如何实现lazy load的?

浏览 8989 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-31  
翻遍了Agile Web Development with Rails也没找到怎么使用Lazy Load,如果没有的话,那么怎么实现类似的功能呢?
   发表时间:2007-01-31  
刑天战士 写道
翻遍了Agile Web Development with Rails也没找到怎么使用Lazy Load,如果没有的话,那么怎么实现类似的功能呢?


默认就是lazy load
0 请登录后投票
   发表时间:2007-01-31  
我的意思是,我只需要某些属性的lazy load,比如,一个Attachment,大多数情况下,我只需要它的文件名等信息,只有再下载的时候才需要他的内容,这样,我就需要把content这个属性lazy load,如何实现?
0 请登录后投票
   发表时间:2007-01-31  
刑天战士 写道
我的意思是,我只需要某些属性的lazy load,比如,一个Attachment,大多数情况下,我只需要它的文件名等信息,只有再下载的时候才需要他的内容,这样,我就需要把content这个属性lazy load,如何实现?


Hibernate的属性lazy功能你成功的使用过吗?
0 请登录后投票
   发表时间:2007-01-31  
刚才试了一下,果然不行,文档上说要加入二进制指示代码,好麻烦……那如果Active Record想实现这个功能,怎么办?通常content很大,在不必要的情况下把他们取出来是不正确的……
0 请登录后投票
   发表时间:2007-01-31  
刑天战士 写道
刚才试了一下,果然不行,文档上说要加入二进制指示代码,好麻烦……那如果Active Record想实现这个功能,怎么办?通常content很大,在不必要的情况下把他们取出来是不正确的……


拆开到另外一个表里面去,建立has_one关联。
0 请登录后投票
   发表时间:2007-01-31  
引用
拆开到另外一个表里面去,建立has_one关联。

那请问 robbin 你的站内短消息的 content 也是拆分的吗? 很明显, 我们在消息列表的时候也是不需要读取 content 的. 尽管这个影响可能不是很大, 但是问题是客观存在的.

我个人认为, 如果是缓存了 Active Record 就不必考虑这些伤脑筋的事情了.
0 请登录后投票
   发表时间:2007-01-31  
不好意思, 刚不知为什么, 老乱码, 编辑了也是乱码
0 请登录后投票
   发表时间:2007-01-31  
缓存太大的对象恐怕不好吧……比如资讯,有可能某些资讯(PDF格式)的content可以达到1MB以上,把这么大个东西放在缓存里面会会拖垮服务器的……

PS:我发这么FC的帖子没被投新手,实在是万幸……
0 请登录后投票
   发表时间:2007-02-01  
Physon 写道
引用
拆开到另外一个表里面去,建立has_one关联。

那请问 robbin 你的站内短消息的 content 也是拆分的吗? 很明显, 我们在消息列表的时候也是不需要读取 content 的. 尽管这个影响可能不是很大, 但是问题是客观存在的.

我个人认为, 如果是缓存了 Active Record 就不必考虑这些伤脑筋的事情了.


短信的内容一般不会很长,整个表也不大,所以不必拆分,其实用不到的字段可以在find方法中指定:select参数,指明加载哪些字段。对于ActiveRecord是可以缓存,现在JavaEye使用比较频繁的model对象都使用了CachedModel,启用了对象缓存,效果还不错。但是这和拆不拆是两码事。像post表的text字段就会很大,单单这个字段的存储就会占整个数据库一半以上存储空间,导致扫描这个表非常耗时,即使加上:select参数,也帮助不大,所以拆分开以后,会提高很多性能。就拿posts表来说,如果不拆,整个表存储空间很大,count一次在我本地电脑都需要8秒种,但是把text字段拆出去以后,count一次只需要0.4秒。





0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics