其实这也是我昨天碰到的一个问题。。 手头有几十万条记录,为了便于叙述,这个记录就当作是“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 编辑 ] |