Posted on 2010-03-19 08:46
n216 阅读(4533)
评论(33) 编辑 收藏
昨天看了一篇挑战数据极限的文章:号称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
97年接触foxBASE, 98年开始接触 Visualfoxpro, 是我当年入门管理类软件的基础。
这东西虽然实在,好用,但是落伍了,希望你早日投奔c#, 推荐+1
如果单讲运行效率来说,现在的软件是越来越慢了
不过开发效率越来越高,这要看从谁的角度想了
从软件公司老板的角度,当然牺牲一部分运行效率来提高开发速度了
这位仁兄请认真看我的文章,.Net平台下,不使用存储过程,不对数据库做优化,100万记录4秒。
你弄个VFP 1秒和C#4秒比,我觉得没有什么可比性,毕竟两者对数据库的连接与操作机制是不同的!
你好,我想做一个提醒,你的速度快是有一个原因的,就是你所插入的数据都是相同的,这样的速度和大数据量,不同数据是有差距的,而且差距比较大
如果你的列大于20,并且大部分数据不同,请你再测试下速度?我以前和你想的一样
既然您如此感兴趣,那就来真正挑战一下,正如我文章中说的
1..Net平台开发,使用ADO.NET操作数据库
2.数据库是SQL SERVER,你随意做优化
3.不要使用存储过程
4.100万条数据为一个测试单元
5.硬件配置2*2.0 G CPU,2G内存
有能耐就在相同环境下,试试能不能突破4秒!别拿个代码数据库一体的东西说事!
@若不是因为你
两边插入的数据是一样的,那边是:Insert Into TableB (Value1) values (‘”+i+”’);
@李鸣(aicken)
嘿嘿,俺去测试一下db4o去。
如果你想和别人比较,那我不想参加,我只是告诉你有这么个原因。
如果就一个列,插入数据相同,1000万和100万效果是不明显的,明白我的意思吗?
如果你的这一个列加入个简单的运算,我想你的速度,就会下来的
@若不是因为你
俺猜lz只是打擂台。似乎lz没有20年也有十几年开发经验,不会不知道你说的这个。我猜lz写本文的目的就是想说明这种测试是意义不大的。
如果用内存数据库(或hash数据库),估计时间更短,对比要在相同的环境下,否则没啥意义
我有个大疑问——既然挑战极限,为啥不让用存储过程?还有,为啥限制了CPU和内存,不限制硬盘?这种操作又占不了啥CPU和内存。
是呀LZ,我拿个TimesTen和你比,有意义吗?
20个字段,大部分varchar,Mysql,200W数据插入,无索引,家用机,270+秒。我倍感震惊,好快。
哦,你不用存储过程,别人同样不用,在这个实验里,数据库就是一个接收终端,不做运算。
硬盘吗,怎么限制?
没想到97年就开始学数据库了,现在应该会ACCESS、INFORMIX、DB2、SQL server、ORACLE吧,如果会还是会讲这样的话。这说明你只会使用具体数据库,而不会对数据库技术有一个基础的理解。
现在很多程序员只是知其然不知所以然。讲出来的话,令人感到可笑!林子大了什么鸟都敢出来飞了。但是要飞还是要个样子。
关于所谓极限问题,我已经说了没有什么意义,关键要理解什么极限,以及极限产生的原因,当你懂了这个道理的时候,无论用什么数据库,无论用什么开发语言都是无所谓的。
当程序员还在为具体的数据库和程序开发语言而沾沾自喜的时候,分明是把自己的低水平暴露给大家了。优秀的程序员早就跨过这个阶段了。
人家是从文件读入,处理列和行
然后你这里是内存直接生成写入,本身就不公平吧?
不要扯什么优秀的程序员不优秀的
本身的测试环境就不一样
根本就不能做比较的
@李鸣(aicken)
数据库就是一个接收终端,不做运算——那你测试的是什么?
测试的是不同的固有方法,比如insert、bulkcopy、bulkinsert等的性能比较
硬盘怎么限制?
单硬盘和双硬盘RAID0速度差别很大吧?
SSD和机械硬盘差别很大吧?
SAS和SATA差别很大吧?
对于密集IO,硬盘往往比CPU、内存更重要。
@李鸣(aicken)
那叫比较这几个方法的性能,不叫挑战XXXX;既然叫挑战,就不要限制在固有方法上;应该是对问题做约束,而不是对解决问题的方法做约束。不然就像开人大会一样。
@Muse
俺猜这位李兄弟也是半路出家的;基础比我这个半路出家的要差一点点。
数据是不同的,我的Insert的数据是循环产生的不同数据,数据库是不给缓存的!
如果有索引,或者有其它约束,速度会慢很多很多。
挑战这样的极限没多大意义
我觉得讨论这个问题没有什么意义,在真实的系统中,根本就不会有这样的情况。如果真想要快的话,别用关系型的数据库了,直接用NoSQL的,更快,哈哈。
做数据库应用,很多时候真的会达到极限呢。即使是一个不起眼的应用,你都会发现数据库真的很慢很慢。
若在国家级的大型机上做这个试验,不知道是几秒?
其实,只是一个单个表插入,意义不是很大,数据库中其实还更重要的主外键约束、查询优化等等。
VPF本身不支持事务。
因此在这里进行比较是无意义的。即使其他因素一样,也没有意义。
直接写硬盘文件估计速度会更快。