老车认为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编辑过]