| 
 
 | 
此文章由 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 编辑 ] |   
 
 
 
 |