发信人: ilike()
整理人: edison(1999-10-21 01:45:35), 站内信件
|
每条fetch语句需要向服务器发送一条命令,也就是需要一个网络对话。 这是肯定的,我不知道Oracle有什么神通可以超越时空限制。 如果你对此感到怀疑,在连接oracle时: 原为:sqlca.dbms = "ORA ......" 改为:sqlca.dbms = "trace ORA....." 这样PB会将每一次向服务器的请求记录在一个文本文件中去。 你自己做一做以下的测试看看我说的对不对。
如果是一个2万条的记录。 使用dw或者是ds,检索过来需要一条select命令。 需要有不超过10次的网络连接。
使用光标,至少需要20002条命令。 open一条。 每条fetch一条,共20000条 close一条。 总计:20002条请求。 需要申请20002次对话。 至少需要不少于4万次的网络连接(fetch一次,取到数据一次,所以是 20000*2) 。
你注意了,我指的是网络连接,也就是底层的TCP/IP连接,不是与服务器之间的 高层连接。
如果同时有10个用户做同一条操作的话。 网络连接数 命令数 datawindow <=100 10条命令 cursor >=400000 200020条命令 --- 我不知道什么服务器,什么类型的 网络能坚持住。
冗余之处以及谁的效率高一些,快一些显而易见。 这里我还不和你计算服务器端维护一个cursor所占用的内存以及资源的开销。
这个正是面向记录的数据库不可忍受的弊病之一。 本身关系数据库理论的出现,减少网络流量是其中一个非常重要的需求。
如果你还愿意坚持这一点很好,我也不想和你辨论下去了。
to: csboy 不要以为小批量的数据库很好,因为数据库中的数据是一直往上增长的,小批量 也会变成大批量的。 解决的方法:不到万不得已,不要使用curosr
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.135.110] ※ 修改:.edison 于 Oct 19 12:36:23 修改本文.[FROM: bbs.szptt.net.cn]
|
|