海量数据库的比较。用DR还是用DS。。。

duguguiyu1984 2006-04-25 10:19:09
在做一个两个数据库数据匹配的测试程序。
原来的程序是用DS先把两边数据库的内容读进内存。然后比较。对与内存无法承受的数据量。利用SQL分页,然后比较。
现在我想用DR来写。个人觉得速度应该能有所提高,对内存的要求也会降低。但还有一些担心。比如,DR中对数据库的排序在哪里进行。运行到后面速度会不会降低。
希望大家给点意见和看法。谢谢。。
...全文
554 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
duguguiyu1984 2006-04-26
  • 打赏
  • 举报
回复
To: Knight94(愚翁)

谢谢了。。我会好好考虑的。。。
Knight94 2006-04-26
  • 打赏
  • 举报
回复
to 1.在做dr=cmd.ExecuteReader()时间颇长。服务器压力很大。按自己理解是在服务器上进行分页。想知道具体如何执行。
2.在dr.read()是服务器压力依然不小。这就不明白服务器是在做什么工作。

因为执行的是查询语句,虽说用dr每次只读一条语句,但是对于数据库服务器端可并不轻松,也会产生临时表,可能方式不像da+ds那样效率低,但是对于数据量大的表来说,一样也是耗时的;至于read操作来说,也是一样的,数据量大的表来说,不能同时放到内存中,也会产生内存换页现象。

既然已经有分页存储,用dr去操作存储可能效果会好很多,不过需要修改的建议如下:
1、每次取得数据记录不要太多;
2、不要让系统帮你去分页,由于你是顺序取,每次取来的最后一条记录的主键值你是知道的,用它作为参数,去获得下一批的记录集。
Kshatriya 2006-04-25
  • 打赏
  • 举报
回复
排序當然要在數據庫裏做了,我用dataSet比過,數據量算比較大吧,還可以
soaringbird 2006-04-25
  • 打赏
  • 举报
回复
哦,两个数据库的数据啊,那就得写程序或者其他方式了。用DR比DS快,你要排序的话,可以在SQL语句里排序,order by 一下。
aSalt 2006-04-25
  • 打赏
  • 举报
回复
up....海量数据没比过

要我比就先排序
然后DR肯定是快

等你们的好办法~
InLimBo 2006-04-25
  • 打赏
  • 举报
回复
如果只要相同或不同这两个结果中的一个的话,可以分别对两个数据库进行hash,比较结果
xieshy 2006-04-25
  • 打赏
  • 举报
回复
1.DR中对数据库的排序在哪里进行? 在DATABASE SERVER.
2.支持用DR.
duguguiyu1984 2006-04-25
  • 打赏
  • 举报
回复
To:soaringbird()

这是一个用于测试的工具。不然你怎么保证sql和oracle中数据一致。你也不能要求所有的测试人员都熟练使用各种数据库工具。

To:boyxia(>>雪饮狂刀 [抵制日货]<<)

不明白,怎么和存储过程扯上了。。
jerryfos 2006-04-25
  • 打赏
  • 举报
回复
DR的查询速度肯定比DS快,相同条件下所占用的内存也会比DS少,根据楼主的应用,应该需要一个或多个共同规则的索引,使用DR逐个比较,比完就丢,把结果记录下来应该就可以了吧
boyxia 2006-04-25
  • 打赏
  • 举报
回复
存储过程里处理比较好
soaringbird 2006-04-25
  • 打赏
  • 举报
回复
为什么不让数据库自己去比呢?海量数据,你光读出来就要多长时间呀?
duguguiyu1984 2006-04-25
  • 打赏
  • 举报
回复
To:Knight94(愚翁)
谢谢指点。因为只需要读取,而且数据分页难度颇大。所以还是决定选择Dr。有点问题还是望指点。(测试的数据表示一个10M的表)
1.在做dr=cmd.ExecuteReader()时间颇长。服务器压力很大。按自己理解是在服务器上进行分页。想知道具体如何执行。
2.在dr.read()是服务器压力依然不小。这就不明白服务器是在做什么工作。
-渔民- 2006-04-25
  • 打赏
  • 举报
回复
認為ds比較合適大量的吧,它吃大內存,因為它支持斷開的呀,
要是小弟說錯,不對之處請指出,請各位不要見怪?^_^
winner2050 2006-04-25
  • 打赏
  • 举报
回复
复习一下计算机等级一级考试的必考题

计算机处理数据的流程都是:硬盘(同类存储介质)》》内存》》CPU缓存》》CPU运算

DR DS的区别是DR读了马上用,马上清理,DS是进入内存里面变成一个内存数据库表,再集中使用,然后清理。
Knight94 2006-04-25
  • 打赏
  • 举报
回复
to DR中对数据库的排序在哪里进行。运行到后面速度会不会降低。

相对来说,dr的效率要高一些,至于排序,是在执行的command中进行,即设置sql语句的排序;
但是要注意的一点是,如果dr没有关闭,那么当前的connection是不会释放的,因此要防止此时用同一个connection去做其他事情。

不过你既然用到分页,用da也未尝不可,而且在更新的时候,也可批量操作。

zhaoliang_chen 2006-04-25
  • 打赏
  • 举报
回复
dr效率高
ds会吃光内存的,效率极低
duguguiyu1984 2006-04-25
  • 打赏
  • 举报
回复
用百万级数据库测试的结果来看。如果两边数据匹配,速度差不了太多。如果不匹配(跳出了),DR的优势明显。从内存上看,DR基本不大用。DS则恐怖了。。。
还想听听大家的看法。要做的是一个4kw++的表。。。紧张啊。。。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧