精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-06
最后修改:2011-09-06
rails中将model传到views层 例如学生与课程关系: students = Students.all 这个时候我还是可以再views层使用 students.each do |stu| stu.clazz.name end 再views可以进行sql查询(也就是懒加载问题),如果views在传输过程中因为网络原因堵塞,会照成数据库链接没有及时释放。 问一下,我现在可以在views上使用这种查询,输出名字,也就是说明rails的数据库链接再views输出后才关闭,是不是意味着程序有可能出现数据库链接没有及时释放问题。 各位,- -# 不要投新手贴,这个问题好像在论坛中没有讨论....希望和大家讨论一下 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-09-07
大家没有这样的疑问么? 求解呀,我已经在翻源码,不过还没有确定问题
|
|
返回顶楼 | |
发表时间:2011-09-07
不要用java的思想来学习rails.
|
|
返回顶楼 | |
发表时间:2011-09-08
qichunren 写道 不要用java的思想来学习rails.
额,其实是这样的,我只想知道rails在views层数据库链接是否还保持。。 java的问题也好 rails的问题也好,在views层保持数据库链接对于互联网应用将会是致命的(感谢中国的网络环境),数据库链接无法及时释放会造成系统瓶颈。 当然局域网项目可能这种问题体现的不是很明显 |
|
返回顶楼 | |
发表时间:2011-09-08
daigong 写道 java的问题也好 rails的问题也好,在views层保持数据库链接对于互联网应用将会是致命的(感谢中国的网络环境), java也好,rails也好,网络问题都不是open session in view的问题,因为前端有web server,而后端的应用在完成view渲染以后,会直接将内容放入到web server buff中,用户网络再慢也不会拉长数据库链接的保持时间。 |
|
返回顶楼 | |
发表时间:2011-09-08
最后修改:2011-09-08
view渲染成html,然后在发到web server的。
|
|
返回顶楼 | |
发表时间:2011-09-08
最后修改:2011-09-08
QuakeWang 写道 daigong 写道 java的问题也好 rails的问题也好,在views层保持数据库链接对于互联网应用将会是致命的(感谢中国的网络环境), java也好,rails也好,网络问题都不是open session in view的问题,因为前端有web server,而后端的应用在完成view渲染以后,会直接将内容放入到web server buff中,用户网络再慢也不会拉长数据库链接的保持时间。 我以前也是这么认为的,不过前几天我做了个很简单的实验,再jsp页面上写一个循环,输出字符“asdadaasdassadasdasdasd”,循环次数为10000*10000次 页面并不是像我们想象一样,先将jsp生成html,然后给用户,而是一边执行程序,当buffer满了之后,网络IO输出一次,然后继续执行程序,页面上有一个属性可以设置buffer, <%@ page buffer="5kb" %> 此外如果在jsp上调用 out.flush(); 也可以人工强制执行IO,只要是网络IO传输一次,就有可能照成网络阻塞,页面等待,jsp 是这样,rails也是好像也是如此,因为无法与之buffer需要多大,这种机制就有可能发生因为页面网络IO阻塞,导致数据库链接没有及时释放。 即便前段有nginx或者apache,buffer总是有大小限制的,如果没有限制,页面放在内存里面,并发访问上来了,内存岂不是撑不住了? 大家尝试一下这种case,如果是我理解错误,希望大家帮忙指出,多谢! |
|
返回顶楼 | |
发表时间:2011-09-08
nginx 用 proxy_pass 给后端的tomcat或者ruby fastcgi,默认的proxy_buffering是开启的,如果真的遇到极大页面size超过buffer size,nginx会放到硬盘上生成临时文件,所以不用当心内存的问题。
|
|
返回顶楼 | |
发表时间:2011-09-08
QuakeWang 写道 nginx 用 proxy_pass 给后端的tomcat或者ruby fastcgi,默认的proxy_buffering是开启的,如果真的遇到极大页面size超过buffer size,nginx会放到硬盘上生成临时文件,所以不用当心内存的问题。
如果是这样我就想通了,那我可不可以这样认为,如果是java Tomcat来容器,使用hibernate opensession 就会出现数据库没有及时释放的问题,而使用nginx之后就不会这样了。 还想问下,除了nginx,apache和lightd 也是有类是机制的吧?这个机制我想了解的话如何去google。。 有没有什么术语 谢谢帮我解除这个疑问,困扰了我好久,呵呵 |
|
返回顶楼 | |
发表时间:2011-09-08
lighttpd和nginx都有,apache我没有用过,不太清楚。
|
|
返回顶楼 | |