posts - 103, comments - 1864, trackbacks - 6, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

昨天看了一篇挑战数据极限的文章:号称100万条记录仅用4秒。

我还是忍不住,用VFP来插入100万条记录。
什么优化都不用,结果不到1秒

表名:t1
字段名:f1 整型

运行环境:联想R60

程序:
SET TALK OFF
thisform.label1.Caption=TTOC(DATETIME())
SELECT t1
FOR i=1 TO 1000000
APPEND BLANK
replace f1 WITH i
ENDFOR
thisform.label2.Caption=TTOC(DATETIME())
结果:1秒(不太精确,估计小于1秒)

结论:100万条记录花4秒,时间太长了。那里是个极限呀!

后来我把100万改成了1000万结果用了5秒。

我不想挑战数据库极限。

虽然很多人不知道什么是数据库极限以及如何计算数据库极限。但是,我知道极限,但不想去挑战这个极限。因为这样做没有什么意义。

 

 

Feedback

#1楼  回复 引用 查看   

2010-03-19 08:48 by 麒麟      
呵呵呵
97年接触foxBASE, 98年开始接触 Visualfoxpro, 是我当年入门管理类软件的基础。
这东西虽然实在,好用,但是落伍了,希望你早日投奔c#, 推荐+1

#4楼  回复 引用 查看   

2010-03-19 08:56 by 老Q      
如果单讲运行效率来说,现在的软件是越来越慢了
不过开发效率越来越高,这要看从谁的角度想了

从软件公司老板的角度,当然牺牲一部分运行效率来提高开发速度了

#5楼  回复 引用 查看   

2010-03-19 08:57 by 李鸣(aicken)      
这位仁兄请认真看我的文章,.Net平台下,不使用存储过程,不对数据库做优化,100万记录4秒。
你弄个VFP 1秒和C#4秒比,我觉得没有什么可比性,毕竟两者对数据库的连接与操作机制是不同的!

#6楼  回复 引用 查看   

2010-03-19 09:07 by 若不是因为你      
你好,我想做一个提醒,你的速度快是有一个原因的,就是你所插入的数据都是相同的,这样的速度和大数据量,不同数据是有差距的,而且差距比较大

#7楼  回复 引用 查看   

2010-03-19 09:09 by 若不是因为你      
如果你的列大于20,并且大部分数据不同,请你再测试下速度?我以前和你想的一样

#8楼  回复 引用 查看   

2010-03-19 09:10 by 李鸣(aicken)      
既然您如此感兴趣,那就来真正挑战一下,正如我文章中说的
1..Net平台开发,使用ADO.NET操作数据库
2.数据库是SQL SERVER,你随意做优化
3.不要使用存储过程
4.100万条数据为一个测试单元
5.硬件配置2*2.0 G CPU,2G内存

有能耐就在相同环境下,试试能不能突破4秒!别拿个代码数据库一体的东西说事!

#9楼  回复 引用 查看   

2010-03-19 09:12 by xiaotie      
@若不是因为你
两边插入的数据是一样的,那边是:Insert Into TableB (Value1) values (‘”+i+”’);
@李鸣(aicken)
嘿嘿,俺去测试一下db4o去。

#10楼  回复 引用 查看   

2010-03-19 09:16 by 若不是因为你      
如果你想和别人比较,那我不想参加,我只是告诉你有这么个原因。
如果就一个列,插入数据相同,1000万和100万效果是不明显的,明白我的意思吗?

#11楼  回复 引用 查看   

2010-03-19 09:17 by 若不是因为你      
如果你的这一个列加入个简单的运算,我想你的速度,就会下来的

#12楼  回复 引用 查看   

2010-03-19 09:23 by xiaotie      
@若不是因为你
俺猜lz只是打擂台。似乎lz没有20年也有十几年开发经验,不会不知道你说的这个。我猜lz写本文的目的就是想说明这种测试是意义不大的。

#13楼  回复 引用 查看   

2010-03-19 09:24 by 菩提树下的杨过      
如果用内存数据库(或hash数据库),估计时间更短,对比要在相同的环境下,否则没啥意义

#14楼  回复 引用 查看   

2010-03-19 09:26 by xiaotie      
引用李鸣(aicken):
既然您如此感兴趣,那就来真正挑战一下,正如我文章中说的
1..Net平台开发,使用ADO.NET操作数据库
2.数据库是SQL SERVER,你随意做优化
3.不要使用存储过程
4.100万条数据为一个测试单元
5.硬件配置2*2.0 G CPU,2G内存

有能耐就在相同环境下,试试能不能突破4秒!别拿个代码数据库一体的东西说事!


我有个大疑问——既然挑战极限,为啥不让用存储过程?还有,为啥限制了CPU和内存,不限制硬盘?这种操作又占不了啥CPU和内存。

#15楼  回复 引用 查看   

2010-03-19 09:38 by 李鸣(aicken)      
引用菩提树下的杨过:如果用内存数据库(或hash数据库),估计时间更短,对比要在相同的环境下,否则没啥意义


是呀LZ,我拿个TimesTen和你比,有意义吗?

#16楼  回复 引用 查看   

2010-03-19 09:39 by 桀然一身      
20个字段,大部分varchar,Mysql,200W数据插入,无索引,家用机,270+秒。我倍感震惊,好快。

#17楼  回复 引用 查看   

2010-03-19 09:41 by 李鸣(aicken)      
引用xiaotie:
引用李鸣(aicken):
既然您如此感兴趣,那就来真正挑战一下,正如我文章中说的
1..Net平台开发,使用ADO.NET操作数据库
2.数据库是SQL SERVER,你随意做优化
3.不要使用存储过程
4.100万条数据为一个测试单元
5.硬件配置2*2.0 G CPU,2G内存

有能耐就在相同环境下,试试能不能突破4秒!别拿个代码数据库一体的东西说事!


我有个大疑问——既然挑战极限,为啥不让用存储过程?还有,为啥限制了CPU和内存,不限制硬盘?这种操作又占不了啥CPU和内存。


哦,你不用存储过程,别人同样不用,在这个实验里,数据库就是一个接收终端,不做运算。
硬盘吗,怎么限制?

#18楼[楼主]  回复 引用 查看   

2010-03-19 09:45 by n216      
引用吉日嘎拉>不仅权限设计:这东西虽然实在,好用,但是落伍了,希望你早日投奔c#, 推荐+1

没想到97年就开始学数据库了,现在应该会ACCESS、INFORMIX、DB2、SQL server、ORACLE吧,如果会还是会讲这样的话。这说明你只会使用具体数据库,而不会对数据库技术有一个基础的理解。
现在很多程序员只是知其然不知所以然。讲出来的话,令人感到可笑!林子大了什么鸟都敢出来飞了。但是要飞还是要个样子。
关于所谓极限问题,我已经说了没有什么意义,关键要理解什么极限,以及极限产生的原因,当你懂了这个道理的时候,无论用什么数据库,无论用什么开发语言都是无所谓的。
当程序员还在为具体的数据库和程序开发语言而沾沾自喜的时候,分明是把自己的低水平暴露给大家了。优秀的程序员早就跨过这个阶段了。

#19楼  回复 引用 查看   

2010-03-19 09:59 by 尘尘      
人家是从文件读入,处理列和行
然后你这里是内存直接生成写入,本身就不公平吧?
不要扯什么优秀的程序员不优秀的
本身的测试环境就不一样
根本就不能做比较的

#20楼  回复 引用 查看   

2010-03-19 10:01 by xiaotie      
@李鸣(aicken)
数据库就是一个接收终端,不做运算——那你测试的是什么?

#21楼  回复 引用 查看   

2010-03-19 10:09 by 李鸣(aicken)      
引用xiaotie:
@李鸣(aicken)
数据库就是一个接收终端,不做运算——那你测试的是什么?

测试的是不同的固有方法,比如insert、bulkcopy、bulkinsert等的性能比较

#22楼  回复 引用 查看   

2010-03-19 10:11 by Muse      
引用李鸣(aicken):
引用xiaotie:
引用李鸣(aicken):
既然您如此感兴趣,那就来真正挑战一下,正如我文章中说的
1..Net平台开发,使用ADO.NET操作数据库
2.数据库是SQL SERVER,你随意做优化
3.不要使用存储过程
4.100万条数据为一个测试单元
5.硬件配置2*2.0 G CPU,2G内存

有能耐就在相同环境下,试试能不能突破4秒!别拿个代码数据库一体的东西说事!


我有个大疑问——既然挑战极限,为啥不让用存储过程?还有,为啥限制了CPU和内存,不限制硬盘?这种操作又占不了啥CPU和内存。


哦,你不用存储过程,别人同样不用,在这个实验里,数据库就是一个接收终端,不做运算。
硬盘吗,怎么限制?


硬盘怎么限制?
单硬盘和双硬盘RAID0速度差别很大吧?
SSD和机械硬盘差别很大吧?
SAS和SATA差别很大吧?

对于密集IO,硬盘往往比CPU、内存更重要。

#23楼  回复 引用 查看   

2010-03-19 10:14 by xiaotie      
@李鸣(aicken)
那叫比较这几个方法的性能,不叫挑战XXXX;既然叫挑战,就不要限制在固有方法上;应该是对问题做约束,而不是对解决问题的方法做约束。不然就像开人大会一样。

#24楼  回复 引用 查看   

2010-03-19 10:23 by xiaotie      
@Muse
俺猜这位李兄弟也是半路出家的;基础比我这个半路出家的要差一点点。

#25楼  回复 引用 查看   

2010-03-19 10:38 by 李鸣(aicken)      
引用xiaotie:
@若不是因为你
两边插入的数据是一样的,那边是:Insert Into TableB (Value1) values (‘”+i+”’);
@李鸣(aicken)
嘿嘿,俺去测试一下db4o去。

数据是不同的,我的Insert的数据是循环产生的不同数据,数据库是不给缓存的!

#26楼  回复 引用 查看   

2010-03-19 14:23 by michael_fei      
如果有索引,或者有其它约束,速度会慢很多很多。
挑战这样的极限没多大意义

#27楼  回复 引用 查看   

2010-03-19 14:53 by 侯伯薇      
我觉得讨论这个问题没有什么意义,在真实的系统中,根本就不会有这样的情况。如果真想要快的话,别用关系型的数据库了,直接用NoSQL的,更快,哈哈。

#28楼  回复 引用 查看   

2010-03-19 15:03 by 南柯之石      
LZ似乎遁了,大家洗洗睡吧。

#29楼  回复 引用 查看   

2010-03-19 15:39 by blackcat      
引用若不是因为你:你好,我想做一个提醒,你的速度快是有一个原因的,就是你所插入的数据都是相同的,这样的速度和大数据量,不同数据是有差距的,而且差距比较大


不一定。分情况讨论

#30楼  回复 引用 查看   

2010-03-19 15:40 by blackcat      
引用xiaotie:
@若不是因为你
俺猜lz只是打擂台。似乎lz没有20年也有十几年开发经验,不会不知道你说的这个。我猜lz写本文的目的就是想说明这种测试是意义不大的。


同感。

这里也搞开了。

#31楼  回复 引用 查看   

2010-03-19 20:42 by 诺贝尔      

做数据库应用,很多时候真的会达到极限呢。即使是一个不起眼的应用,你都会发现数据库真的很慢很慢。

#32楼  回复 引用 查看   

2010-06-05 22:42 by 通用权限管理系统      
若在国家级的大型机上做这个试验,不知道是几秒?
其实,只是一个单个表插入,意义不是很大,数据库中其实还更重要的主外键约束、查询优化等等。

#33楼  回复 引用 查看   

2011-04-20 18:23 by 徐少侠      
VPF本身不支持事务。
因此在这里进行比较是无意义的。即使其他因素一样,也没有意义。
直接写硬盘文件估计速度会更快。