在网上上看到一篇文章,用到sphinx的分布式特性来提高搜索性能,就做了个简单的测试。
1. sphinx配置.
配置加粗部分是核心,让sphinx支持分布式。
source multi1 { type = mysql sql_host = 127.0.0.1 sql_user = root sql_pass = passwd sql_db = cs sql_port = 3306 sql_query = select id,title,content from fts_index where id%2=0
sql_ranged_throttle = 0 } source multi2{ type = mysql sql_host = 127.0.0.1 sql_user = root sql_pass = passwd sql_db = cs sql_port = 3306 sql_query = select id,title,content from fts_index where id%2=1
sql_ranged_throttle = 0 } index multi1{ source = multi1 path = /usr/local/coreseek/var/data/multi1} index multi2{ source = multi2 path = /usr/local/coreseek/var/data/multi2} index search { type = distributed local = multi1 local = multi2
}
没有分布式的配置,这个么什么好说的
source main { type = mysql sql_host = 127.0.0.1 sql_user = root sql_pass = passwd sql_db = cs sql_port = 3306 sql_query = select id,title,content from fts_index sql_ranged_throttle = 0 } index search{ source = main path = /usr/local/coreseek/var/data/search }
2. 测试数据(fts_index表里的数据是96664)
3. 创建索引。multi1和multi2分别索引了48332条记录,文档大小79.3+78.7=158m
一次创建所有的96664,总大小158m
3. 开启searchd服务,基于之前的应用,用ab做压力测试(ab -n 10 -c 10 http://192.168.1.120:8000/search/?all_in=天堂)。rps是13.84。而在这期间,我机器上2颗cpu的都标得很高。可见,确实用多核。(在客户端做查询的时候需要设置索引client.AddQuery(q,index),这里index为search)
单个index,rps6.06。在测试过程中,确实只有一颗cpu到过99%,另外一颗很稳定。
测试结果很明显,利用了sphinx的分布式特性的完胜。整个过程内存变化不是太多,而cpu一般都能到99%。