| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5340 人关注过本帖
标题:老车认为CURSOR表在磁盘
只看楼主 加入收藏
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:44
专家分:6
注 册:2016-5-12
结帖率:57.14%
收藏
已结贴  问题点数:20 回复次数:15 
老车认为CURSOR表在磁盘
___2021年10月17日

CURSOR表在哪里存放由于没有权威的明确说明,VFP业界大师们时常讨论。有说在内存的,有说在磁盘的,还有说数据量小时在内存,大时转磁盘。老车认为CURSOR表必须在磁盘,理由如下:

一、首先要确定CURSOR表的主要作用是什么。老车认为CURSOR表主要是为作为远程表与VFP的链接表(也叫视图)而设计的。老车在学用CA 与SQL时发现、用CA从远程SQL检索到VFP中的视图,也就是CURSOR表,与SQL中的源表结合的相当牢固,老车曾经设想需要切开时随时切开,需要链接时随时链接,然而花了几天时间都切不开,至今也没能切开,觉得除非退出VFP、断电或拨下网线,否则无法切开。说这些老车是想说明作为视图的CURSOR表与远程SQL中的源表结合是相当紧密复杂的,怎么可以忽而内存忽而磁盘的随时折腾呢?还有数据在内存与磁盘的存放方式应该是不同的,关联方式也就不同,来来回回折腾需要改变链接方式,必然是很要命的;还有正在折腾时发生断电等导致数据表损坏的机率徒增,且很难预防和处理;还有计算机操作都是瞬息万变的,总是那么来来回回折腾不仅费机时,判断是否需要折腾也是很累的,系统怎么能判断出操作员下面点击哪里、下一秒数据量是增加还是减少?如果是老车编写VFP不会那么整的。
二、我们都知道电脑内存或VFP所能管理的内存是有限的,不足以容纳特大的远程SQL等源表,而磁盘对操作远程SQL等数据源表而言可以视为足够大,所以VFP不会将CURSOR表放在内存,而要放在磁盘。
三、CURSOR表不作为SQL等远程源表的视图,而作为VFP自身数据载体只是该表的附属功能,VFP不会因附属功能而另设计存放方式的。并且如果放入内存,也同样存在内存容量不足来回折腾的问题。
四、用 DBF() 函数获取的CURSOR 表所在位置无一不在磁盘更能说明问题,也不知道为什么DBF() 获取的位置明明是在磁盘上,还有硬说在内存的。

也有人可能会说我并不关心CURSOR 表存放在哪里,只管用就是,讨论这个没有意义。其实则不然,有的东西不搞清原理有时会吃亏的,老车之前就一直在吃这个亏。之前老车也是一直认为CURSOR 表存放在内存,运行速度当然要比存放在磁盘快很多,因而有时宁可克服CURSOR 表不能保存、不能插入行、不能PACK 等缺点也用CURSOR表、而不用基本DBF表。弄清了CURSOR表也是在磁盘、与基本DBF表操作速度相同,今后就不会再吃这个亏了。老车还分析过CURSOR既然在磁盘为什么不能保存、不能插入、不能PACK,认为皆是因为它与远程源表关联所至。就拿保存来说吧,你这里退出VFP或关机保存了CURSOR 表,在此期间其它终端机改动了源表你怎么能知道,再重新操作这个表时还不是要重新检索才行,之前保存的CURSOR表便成为了垃圾、占用磁盘,没有意义。CURSOR表不保存、不形成垃圾也成为了它的优点之一。

以上仅是老车个人观点,也无真凭实据,欢迎持不同观点的大师提反面意见,但也要说出一、二、三、……道理,不可简单的只说就是就不是。

[此贴子已经被作者于2021-10-20 11:09编辑过]

搜索更多相关主题的帖子: VFP SQL 内存 磁盘 CURSOR 
2021-10-20 09:48
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:738
专家分:1107
注 册:2021-10-13
收藏
得分:4 
网上一搜,有说保存再内存里的,有说就是一物理表,保存再temp文件夹,搞不懂。。。
2021-10-20 12:41
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:44
专家分:6
注 册:2016-5-12
收藏
得分:0 
“物理表”等于没说,物理表在哪里?是在内存还是在磁盘?
2021-10-20 13:58
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2195
专家分:3828
注 册:2007-4-27
收藏
得分:4 
我一直以为是在内存中的。又能进步一点,很高兴。谢谢!

只求每天有一丁点儿的进步就可以了
2021-10-20 14:19
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:4 
是在磁盘上,只是个别时候与一个表或其它临时表共用一个文件,但是这个文件与个静态表(DBF)文件结构不一样,与打开的表文件一样,只有数据部分。这也是DBF表打开时,突然停电表文件容易破坏的原因。

[此贴子已经被作者于2021-10-20 15:46编辑过]


dBase有人接盘了。
2021-10-20 15:34
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:44
专家分:6
注 册:2016-5-12
收藏
得分:0 
谢4楼认同!谢5楼支持!
2021-10-20 18:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:4 
也来吹下水
在内存,在磁盘,应该是相对来说。内存可以当磁盘用,磁盘也可当内存用。
数据量小时可以全部放在内存处理,数据量大到一定时有可能要采用缓存处理,即同时使用内存和磁盘来处理。
至于VFP的CURSOR,看他允许处理的数据量,估计也离不开磁盘。
2021-10-20 22:04
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:44
专家分:6
注 册:2016-5-12
收藏
得分:0 
回复 7楼 吹水佬
热烈欢迎坛中大佬参与讨论!各抒己见、畅所欲言。
2021-10-21 04:01
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:738
专家分:1107
注 册:2021-10-13
收藏
得分:0 
回复 3楼 惬意_甬车
内存里有个文件,另外user文件夹里一个临时文件夹里也有一个。。。
2021-10-21 11:14
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:44
专家分:6
注 册:2016-5-12
收藏
得分:0 
回复 9楼 sam_jiang
重在参与!
2021-10-21 12:33
快速回复:老车认为CURSOR表在磁盘
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015834 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved