Как настроить кластер asticsearch на одном сервере, чтобы получить лучшую производительность при поиске
Я новичок в asticsearch. У меня есть индекс Elasticsearch около 300 000 наименований. Для каждой из 60 миллионов записей в другой таблице мне нужно сделать сложный запрос к этому индексу ES.
Сейчас это очень медленно (выполнение 1000 запросов заняло бы 200 секунд). Мне нужен совет по настройке моего кластера эластичного поиска для обработки большого количества запросов.
Мой сервер:
8 core
8GB ram
SSD Hardware
Я хочу настроить asticsearch для обработки 1000 одновременных поисковых запросов от ruby. (Я хочу искать 1000 предметов параллельно).
Я попытался с конфигурацией по умолчанию
Я думаю, что по умолчанию elasticesearch может обрабатывать только около 10-20 одновременных поисковых запросов. Это использует маленький процессор и оперативную память. Поэтому, думаю, я мог бы это улучшить.
Я мог запустить только 100 потоков из ruby для поиска 1000 элементов, и это занимает около 200 секунд. Если я увеличу до 1000 потоков из ruby, ES вернет сообщение об ошибке тайм-аута.
Я запускаю мастер-узел с
ES_HEAP_SIZE=2G
indices.fielddata.cache.size: 1g
threadpool:
search:
type: fixed
size: 200
queue_size: 400
shares: 5
replicas: 1
Запуск 100 потоков из рубина для поиска 1000 элементов по-прежнему занимает 200 с.
Я добавляю 3 новых узла в качестве узлов данных на этом сервере.
Запуск 100 потоков из рубина для поиска 1000 элементов по-прежнему занимает 200 с или более.
Я гуглю и читаю из некоторых постов. Люди говорят, что создание большего количества осколков сделает поиск медленным.
Как я могу улучшить свой поисковый запрос?
Большое спасибо!
1 ответ
Вы хотите посмотреть это видео:
http://www.elasticsearch.org/webinars/elasticsearch-pre-flight-checklist/
Значения по умолчанию для ES отлично подходят для разработки, но не для производства. Единственное, что вам действительно нужно сделать, - предоставить JVM 50% доступной памяти на сервере. Это видео имеет много других полезных советов.