sphinx+python 索引耗内存

搜索一直用的是coreseek,数据源方面用的是python,以前数据量少的时候没问题,数据量一大,用python建索引就出现问题。

未做优化前,python建索引的过程的第一步就是先捞出所有的数据放内存,这也是官网文档的做法,数据量一大,必然导致占用内存过大,导致进程终止或者服务器负载过高。

实际数据:200W,在执行python数据源时,内存达到2g以上。

优化后的数据:内存维持在427M,没有继续增长。

原先的python的代码把sql的查询都放在defConnected(self)方法,一次性全部查询出来后使用defNextDocument(self)遍历。

现把查询语句调到NextDocument(self)方法中。

基本思路如下:

1.先查询出该表的最大id值

2.对查询进行分页,比如10页,limit=maxId/10

3.第一次执行NextDocument或者执行次数是limit的倍数的时候,执行sql查询,把查询结果出分页结果集

4.循环遍历结果集

5.分页次数到达11页时,returnFalse。

此方法基本可以保证大数据量下建索引没有内存问题。

相关推荐