
Дельта индексы необходимы для того, чтобы не индексировать базу полностью в течении короткого времени, а использовать маленький индекс.
К примеру, мы имеем очень много записей в базе данных, сотни тысяч или несколько миллионов записей, и данные поступают очень часто, нам их необходимо индексировать, однако запускать каждые 5-10 минут индексацию — это слишком трудоемко.
Поэтому мы делаем два индекса:
- Полный — индексируются все данные целиком (запускаем раз в сутки)
- Дельта — индексируется только малая часть данных, добавленных в течении дня (запускаем каждые 5-10 минут)
Но как определять с какого момента индексировать данные в дельта-индексе?
Нам необходимо помнить крайний проиндексированный ид-записи из полного-индекса, и начинать индексировать данные только с него, все очень просто :)
Для этого создадим еще одну таблицу в базе данных, чтобы хранить там ид крайней записи из полного-индекса:
1 2 3 4
| CREATE TABLE `sphinx_delta_counter` (
`index_name` ENUM( 'pyha_forum' ) NOT NULL,
`last_post_id` INT UNSIGNED NOT NULL
) ENGINE = InnoDB; |
Где,
- «index_name» — имя индекса, например если у вас много индексов с разных таблиц (можно опустить, если у вас один индекс);
- «last_post_id» — крайний номер записи для конкретного индекса.
Вставим для нашего индекса запись, чтобы потом можно было обновлять счетчик:
1 2
| INSERT INTO `sphinx_delta_counter`
SET `index_name` = 'pyha_forum', `last_post_id` = 0; |
Вы конечно можете этот запрос и в индексе сфинкса использовать, предварительно переписав его на «on duplicate key» и добавив уникальный индекс на связку «index_name+last_post_id», однако я думаю это излишне.
Читать полностью »