Anton_D
Новичок
Как распараллелить поисковый запрос для увеличения производительности?
Итак, с чем имеем дело:
Таблица объемом около 10 млн записей varchar(255). И вот по этой таблице делается поиск по подстроке, типа SELECT * FROM TBL WHERE name like '%query%' Размер таблицы пока таков, что она еще лезет в память целиком - 1гб. Пусть в данный момент такой поиск занимает 1 сек. Прогнозируется увеличение количества записей в 10 раз.
Что нужно: сдержать время отклика на текущем уровне.
Первое что приходит в голову: тупо разделить таблицу на 10 частей, каждую из которых положить на свой сервер, сервера соединить сеткой, кидать им соответственно 10 одинаковых запросов, получать 10 рекордсетов, которые потом объединять в один. В результирующем рекордсетете обычно получается не более 1000 строк, так что проблем со 100 мбит сеткой не будет. Пишмашинки типа Cel D 2ггц стоят несравнимо дешевле настоящих серверов, их можно покупать десятками по мере необходимости.
А теперь вопрос: а как организовать 10 параллельных запросов из php скрипта? Запустить их exec-ом в виде внешних скриптов, организовать флажки/семафоры и мониторить все это хозяйство из основного скрипта на предмет результатов выполнения возврата результата? Бред или нет? Может быть я велосипед изобретаю? Буду благодарен за пинок в нужном направлении.
Итак, с чем имеем дело:
Таблица объемом около 10 млн записей varchar(255). И вот по этой таблице делается поиск по подстроке, типа SELECT * FROM TBL WHERE name like '%query%' Размер таблицы пока таков, что она еще лезет в память целиком - 1гб. Пусть в данный момент такой поиск занимает 1 сек. Прогнозируется увеличение количества записей в 10 раз.
Что нужно: сдержать время отклика на текущем уровне.
Первое что приходит в голову: тупо разделить таблицу на 10 частей, каждую из которых положить на свой сервер, сервера соединить сеткой, кидать им соответственно 10 одинаковых запросов, получать 10 рекордсетов, которые потом объединять в один. В результирующем рекордсетете обычно получается не более 1000 строк, так что проблем со 100 мбит сеткой не будет. Пишмашинки типа Cel D 2ггц стоят несравнимо дешевле настоящих серверов, их можно покупать десятками по мере необходимости.
А теперь вопрос: а как организовать 10 параллельных запросов из php скрипта? Запустить их exec-ом в виде внешних скриптов, организовать флажки/семафоры и мониторить все это хозяйство из основного скрипта на предмет результатов выполнения возврата результата? Бред или нет? Может быть я велосипед изобретаю? Буду благодарен за пинок в нужном направлении.