Распараллеливание sphinx


(По материалам Aurimas Mikalauskas с http://www.percona.com/)

По умолчанию sphinx ищет по индексу в одном потоке.
То есть, дефолтный конфиг выглядит схематично так:

source src1
{
	type = mysql
	sql_query = SELECT id, text FROM table
}
index idx1
{
	type = plain
	source = src1
}
searchd
{
	dist_threads = 0 # default
}

Но есть возможно заставить sphinx искать одновременно в несколько потоков. Для этого индекс нужно "партицировать":

source src1
{
 type = mysql
 sql_query = SELECT id, text FROM table
}
 
source src1p0 : src1
{
 sql_query = SELECT id, text FROM table WHERE id % 3 = 0;
}
 
source src1p1 : src1
{
 sql_query = SELECT id, text FROM table WHERE id % 3 = 1;
}
 
source src1p2 : src1
{
 sql_query = SELECT id, text FROM table WHERE id % 3 = 2;
}
 
index idx1_template
{
 type = plain
 source = src1
}
 
index idx1p0 : idx1_template
{
 source = src1p0
}
 
index idx1p1 : idx1_template
{
 source = src1p1
}
 
index idx1p2 : idx1_template
{
 source = src1p2
}
 
index idx1
{
 type = distributed
 local = idx1p0
 local = idx1p1
 local = idx1p2
}
 
searchd
{
 dist_threads = 3
}