Я разрабатываю поиск, который будет получать от 50 до 200 ГБ текстовых данных в день (аналогично журналам), и ему нужно только сохранить эти данные за неделю или две. Эти данные будут передаваться по каналам с постоянной скоростью (5000/в секунду, например), нон-стоп, 24 часа в сутки. Через неделю или две документ должен выпадать из индекса, который никогда не будет слышен снова.Сфинкс: поиск в режиме реального времени с истечением срока?
Индекс должен быть доступен для поиска со свободным текстом только на одном поле (довольно маленький размер, не более 512 символов). В лучшем случае схема может иметь 2 атрибута, которые можно классифицировать.
Система должна быть проиндексирована почти в режиме реального времени, когда данные подаются на нее. Приемлема задержка от 15 до 30 секунд.
Мы предпочитаем передавать данные в индекс/службу с постоянным потоком данных о трубах.
И, наконец, отдельное автономное решение предпочитает настройку распределения любого типа (это будет частью пакета для развертывания и настройки на локальных машинах для тестеров).
Я внимательно изучаю поисковую систему Sphinx с обновлениями RT через API, поскольку он проверяет большинство из них. Но я не вижу простого способа истечения срока действия документов через определенный промежуток времени.
Я знаю, что я мог отслеживать идентификаторы и временную метку и выдавать пакетный DELETE через API Sphinx. Но это создает проблему отслеживания большого количества идентификаторов в отдельном хранилище данных, которое будет нуждаться в том же вставке 5 000/в секунду и удалении их, когда это будет сделано.
У меня также есть проблема с Sphinx. Фрагментация массового вставки и массовое удаление в середине вставки.
Мы бы предпочли, чтобы поисковая система/указатель обрабатывала сам срок действия.
Я думаю, что я могу выполнить отметку WHERE timestamp < UNIXTIMESTAMP-OF-TWO-WEEEKS-AGO как предложение where в API Sphinx для сбора идентификаторов документов для удаления. Проблема с этим заключается в том, что если система не останется на пути к удалению, общее количество документов/результатов поиска будет составлять 10 миллионов, а может быть, даже миллиарды в счете после двухнедельного таймфрейма, если он должен собрать несколько дней ценность идентификаторов документов для удаления. Это не выполнимый запрос.
Спасибо за совет! Ну, я ничего не обновляю. Просто пишите один раз, он сидит неделю или две, а затем удаляется. Интересно, что удаление Chunk и переписывание заголовков. Я мог бы запланировать окно обслуживания минут или два раз в день, что делает то, что вы предлагаете: shutdown searchd, удалить старые куски, переписать заголовки. Если это хорошо документировано, это звучит как способ пойти. Я все еще изучаю Sphinx, поэтому, если отключить searchd, значит ли это, что я не смогу передавать данные в api? Searchd = api? – eduncan911
Когда «обновление» означает обновление самого индекса hte, просто добавьте документы. Чтобы добавить единый документ, весь индекс нуждается в перетасовке, Sphinx немного смягчает его, сохраняя раздел индекса в памяти (блок RAM). Я не думаю, что файлы заголовков документированы вообще, но исходный код доступен :) В то время как searchd (процесс демона sphinx) выключается, не сможет вводить новые документы. – barryhunter