G gfwlxx Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-10 #1 思陆1: list导入处理. 试都不用试,文件太大 思陆2: eof 处理.. 可是我怎么写呢??
H hfghfghfg Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-10 #3 你有时间 限制吗 比如 要 几秒内完成 要不要 忽略大小写? 要不要 trim 等等 ? 你 每行 的 一般 有多少 字符 是否 已经 排序的 ?
李 李翔鹏 Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-10 #4 楼上在胡说吧? 几秒内完成?2G的数据几十分钟估计都不可能完成。
李 李翔鹏 Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-10 #7 来自:hfghfghfg, 时间:2008-12-10 9:59:06, ID:3934660 几秒 可能 做不到 几 分钟 是没问题 ---- 你试过大数据吗? 你试试再说吧。
Z zbdzjx Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-11 #8 按照目前硬盘的速度,如果一秒读100M的数据,那2G的文本,至少要20秒才能读到内存当中,如果再写回硬盘,那至少还要20秒以上,加在一起,至少要40秒以上才行,但好象很少有硬盘能读到100M/秒,除非是服务器硬盘或是RAID。 而且全部读到内存中也不太可能,所以需要硬盘缓冲,所以时间会更长。 如果重复的记录非常多,有些算法可以对文本进行摘要提取,如不同,保存,如相同,删除,这样占用的内存会少些。
按照目前硬盘的速度,如果一秒读100M的数据,那2G的文本,至少要20秒才能读到内存当中,如果再写回硬盘,那至少还要20秒以上,加在一起,至少要40秒以上才行,但好象很少有硬盘能读到100M/秒,除非是服务器硬盘或是RAID。 而且全部读到内存中也不太可能,所以需要硬盘缓冲,所以时间会更长。 如果重复的记录非常多,有些算法可以对文本进行摘要提取,如不同,保存,如相同,删除,这样占用的内存会少些。
G gfwlxx Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-11 #9 这么简单的问题,居然没人答的上. 嗨... 就是过滤重复行,不trim 不忽略,速度当然越快越好
Z zzutrain Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #10 方法也很简单. 何必写程序呢. 装了sql server 建个表,导入数据, 然后用sql server 去处理. 若你很固执的一定要程序去实现. 那就做用映像文件. 若你的行字节数一样长. 读长度子节, inc(Pword(*)) 保存到数据库,(数据库做索引. 否则查找很慢, 索引后是2分法查找), 若你不保存到数据库, 写文件, 再用二分法查找, 我感觉效率没有sql server 高
方法也很简单. 何必写程序呢. 装了sql server 建个表,导入数据, 然后用sql server 去处理. 若你很固执的一定要程序去实现. 那就做用映像文件. 若你的行字节数一样长. 读长度子节, inc(Pword(*)) 保存到数据库,(数据库做索引. 否则查找很慢, 索引后是2分法查找), 若你不保存到数据库, 写文件, 再用二分法查找, 我感觉效率没有sql server 高
Z zzutrain Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #11 这样算下来, 我估计 20分钟内, 应该就可以搞定. 几分钟的我不赞同. 若没有重复判断, 感觉几分钟可以完成.
E errorcode Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #12 几分钟有可能,LZ之意只是说过滤,过滤再写入文件,打个折,一半,处理后,打个比方有1G 那设读30s,写15s,满算1分钟 其它时间为处理时间 过滤处理可以这样,对每行进行N个hash{hash1, hash2, hash3},看是否重复大概就是比较三个hash的值,这样减少运算,一行处理过滤时间很少了,也就是几个比较命令。 这样的情况,几分钟是可以的。 以上,理想状态下。
几分钟有可能,LZ之意只是说过滤,过滤再写入文件,打个折,一半,处理后,打个比方有1G 那设读30s,写15s,满算1分钟 其它时间为处理时间 过滤处理可以这样,对每行进行N个hash{hash1, hash2, hash3},看是否重复大概就是比较三个hash的值,这样减少运算,一行处理过滤时间很少了,也就是几个比较命令。 这样的情况,几分钟是可以的。 以上,理想状态下。
W wisenow Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #13 可以使用树(多叉树),结合hash,即快又省内存 只要理解这种做法,具体实现也不复杂
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #14 嗯,list不是为操作大文件准备的。 对于大文件,较为理想的方式是用内存映射,然后分段做试图来处理。 否则,就算你有4个G的内存,用户态下的内存也还是只有2G可用,进程本身占了一部分,所以,2G的文件全部载入内存不可能。 除非是服务器操作系统,可以开3G用户内存使用[]
嗯,list不是为操作大文件准备的。 对于大文件,较为理想的方式是用内存映射,然后分段做试图来处理。 否则,就算你有4个G的内存,用户态下的内存也还是只有2G可用,进程本身占了一部分,所以,2G的文件全部载入内存不可能。 除非是服务器操作系统,可以开3G用户内存使用[]
X xusong168 Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #15 分段处理吧 一部分一部分排序 然后比较有序数据
W wr960204 Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #17 不能一次全部加载到内存. 可以利用Hash算法 不管怎么样一定会非常慢
有 有畏 Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #18 楼猪有意思, “这么简单的问题,居然没人答的上. 嗨... 就是过滤重复行,不trim 不忽略,速度当然越快越好 ” “这么简单的问题”自己都处理不了,想要别人的劳动成果的时候,还这样的态度,让人心寒! 老实和你讲吧,这个问题是能较快速的解决的,但是是一个商业解决方案,除非你出现钱!
楼猪有意思, “这么简单的问题,居然没人答的上. 嗨... 就是过滤重复行,不trim 不忽略,速度当然越快越好 ” “这么简单的问题”自己都处理不了,想要别人的劳动成果的时候,还这样的态度,让人心寒! 老实和你讲吧,这个问题是能较快速的解决的,但是是一个商业解决方案,除非你出现钱!
M madic Unregistered / Unconfirmed GUEST, unregistred user! 2008-12-12 #20 一部分一部分加载进内存,用文件映射的方式... 用Hash加载,顺便算出长度..分配到不同桶上