大数据量的文件和数据比对算法
有一文件,每行的格式相同,都为:“用户ID,学校名称”。例如:
27,北师大
6559,复旦
大约46万行;
数据表包含学校ID、学校名称字段。例如:
1 北京师范大学
2 复旦大学
大约2000行;
文件中的学校名称可能是简写,表中为全称;
现要找出文件内的学校名称不存在于表中的行,要考虑到简写和文字顺序情况。例如:“北师大”匹配“北京师范大学”,但不匹配“师范大学北区”。
我目前的做法是:先将表内的学校名称数据全部读出存成字符串$school,其中每个学校名称之间用"|"分隔;然后分批读取文件(例如每次200行),explode(",",$str)后再将学校名称部分$str[1]与$school做正则比对。
考虑到中文简称问题,$str[1]中的每一个汉字间又要插入".*",还要考虑到学校名称的间隔符"|"……
测试效率非常低,200行的文件数据用时大概1分钟。
求一个高效率的算法,谢谢。