十亿级别字符串模糊匹配设计与实现

项目用mongodb作为数据库,mongodb支持索引,可对玩家名建立索引快速查找玩家名对应的项。模糊匹配方面,mongodb有提供全文匹配机制,可以用来实现模糊匹配需求。不过mongodb的全文匹配有两个缺点,一是中文版的全文匹配是收费功能,二是mongodb的全文匹配专业性、速度性都不是很成熟。使得项目不得不另外寻找新的实现方式。

1
2
3
4
5
>>> ID = "59e1e6cd5c21ac436052300c"
>>> Name = "玩家名字长度八字"
>>> print sys.getsizeof(Name), sys.getsizeof(ID)

(49, 57)

考虑利用游戏脚本逻辑来实现,用Python多进程协同组成集群方式来实现。这种方式自由度高、易维护、可控性强,在游戏服务器架构上无需要额外部署新的环境等诸多优点。元数据玩家名, 玩家ID在Python中所占内存约为110Byte,加上建立索引的消耗共占内存约200Byte,十亿玩家的数据量就是200GB。考虑到Python内存利用率低,群集内存消耗过大而放弃用Python脚本逻辑来实现。最后考虑用基于Lucene的全文搜索引擎Elasticsearch来实现这个功能。