易语言快速文本组合思路
简单的文本操作和字节集操作,这种基本操作,在编程语言中作用非常大。
在日常工作中,可以帮助批处理很多数据。
一般的操作非常简单,但是如果数据量巨大,就需要调整编程逻辑,才能做到高效处理。
做seo的人最常用到的,就是文本组合和文本去重复。在以百万为单位的数据处理时,简单的命令就无法胜任了。
对,不是效率慢,而是根本无法胜任。
比如,你用有三组关键词,每组100个。将三组进行排列组合,那就100X100X100=1000000的数据。
用一般的组合命令,如果是两组进行组合,那么可能速度还是可以接受的。但三组,就是指数级的递增。
洪雨研究查阅很多资料,有说内存操作的,有说用数据库操作的。
数据库操作通常指的是mysql操,洪雨不太懂。内存操作的确是速度最快的。可惜这两种方法洪雨都不太会,所以根本没研究。最终选择了快速文本对象和字节集操作。
快速文本对象,我也不知道什么原理,但是当数据量大的时候,就能看出比普通的文本操作速度确实快很多。
经过测试,1000000的数据用普通取文本操作,直接等到天荒地老。用快速文本对象用时70秒左右。
虽然勉强处理完毕,但是这种 速度还是让人无法接受的。
洪雨后来也尝试了字节集操作和快速快速字节集对象。速度确实又提高了一些,但是提高的非常有限。
如果百万级别的数据组合速度无法控制在10秒以内,那么就没有达到效果。
搞来搞去,找来找去,最终还是落在了多线程的头上。
最终,通过多线程加快速文本对象,百万的数据处理在5秒左右,不超过6秒。
为什么没有用字节集呢,因为最终你还是要转换成文本,这个转换过程也是会耗费时间的。
说一下具体思路。
首先,将第一组关键词和第二组关键词进行组合。就是100X100=10000不需要什么方法,因为数据量小,直接数组叠加就行了。运行时间半秒钟左右。
生成好的结果再和第三组进行组合。10000X100=1000000这个数据量就大了,我们通过多线程进行处理。
举例,我们调用100个线程进行操作。那么第一步,我们通过分割这10000个结果关键词,10000÷100=100。也就是一个线程处理100个关键词和第三组的组合。
上面我们说了,100X100的处理速度不到半秒,也就是说,一个线程的处理时间不到半秒。100个线程同时处理,理论上说也不到半秒。最后将结果加起来。
通过实际测试,1000000数据的实际处理时间在5秒左右。
数据体积大概50M以上,如果你想显示在软件编辑框中,还需要10秒钟时间加载。就算你写到txt文档中,打开时间也不短。
这中间还有一个问题。
就是,数据通常都不能被100整除。所以,正常的逻辑是,1.第一组和第二组进行组合,生成一个结果。2.将这个结果除以100取余数,先将余数进行组合处理。3.将剩下的除以100,进行分组多线程处理。
大概的速度,就是100万5秒,200万10秒这样。
到此,问题基本解决。
可以参看一下,我之前记录的单线程代码。https://www.cnblogs.com/hongyuyingxiao/p/11628058.html
原文转载自:http://www.zhizhuowz.com/post-676.html