|
此文章由 righttang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 righttang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
其实这也是我昨天碰到的一个问题。。
手头有几十万条记录,为了便于叙述,这个记录就当作是“Family Name”吧,长度也就是英语单词。数据样本是随机的,并不能预先排序或者索引.(数据是XML格式,并没有放在数据库里,纯粹JAVA处理这些数据)
我现在的需求就是,统计出,最常用的15个姓氏,并且给出具体数字。比如说,姓Smith的,有2000个人,姓Wong的,有20个人。
于是,我也就随便写了个算法,遍历一遍,然后读一个判断一个,要是有了就加1,要是没有的话,就新增
全部读完,最后排序一下。
结果呢,就是150%CPU占用率(双核),30多秒的运行时间。。。
这个服务使用率非常高,大概一天会被点击上万下,每次的样本都不一样,样本小的,速度还行,1,2秒可以处理几千个记录。但是碰上大样本,直接服务器报警。所以呢我就想改进一下。
1.用模糊算法,由于这个要求并不是100%精确的数据,几十万个记录里,取一部分,能大概表示一下,赵钱孙里大概有多少。不过我也只是耳闻,没有实际用过。谁要了解的指点一下
2.改进算法,我也想了半天,到底用什么样的算法好呢?
贴一下数据XML样本
贴一下XML的样本,需要统计的,就是XML里面的的value,以逗号分隔。当前算法,已经在遍历的时候,就做了分类了,还是慢。。。。
<group value="ENDORSED,Interactive,Digilearn,Focus groups,Furnishings,Furniture,Houses,Learning Federation,Locations,Pinyin,Positioning,Prepositional phrases,Prepositions,Questions,Rooms,Scootle,TL,Chinese languages">
<count>1</count>
</group>
<group value="ENDORSED,Interactive,Digilearn,German language,Illustration,Learning Federation,Scootle,Simple sentences,Sound effects,TLF,Adjectives">
<count>1</count>
</group>
[ 本帖最后由 righttang 于 2010-12-9 17:15 编辑 ] |
|