У меня есть специальный указатель для перколяторов.
Есть вопросы 3000
. Вот типичный запрос:ElasticSearch multi percolate performance
{
"index": "articles_percolators",
"type": ".percolator",
"body": {
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"query_string": {
"fields": [
"title"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
},
{
"query_string": {
"fields": [
"content"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
},
{
"query_string": {
"fields": [
"url"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"feed_id": [
3215,
3216,
10674,
26041
]
}
}
]
}
}
}
},
"sort": {
"date": {
"order": "desc"
}
},
"fields": [
"_id"
]
},
"id": "562"
}
Отображение (массив PHP). Фильтры, анализаторы и tokenizers исключены для краткости:
'index' => 'articles_percolators',
'body' => [
'settings' => [
'number_of_shards' => 8,
'number_of_replicas' => 0,
'refresh_interval' => -1,
'analysis' => [
'filter' => [
],
'analyzer' => [
],
'tokenizer'=> [
]
]
],
'mappings' => [
'article' => [
'_source' => ['enabled' => false],
'_all' => ['enabled' => false],
'_analyzer' => ['path' => 'lang_analyzer'],
'properties' => [
'lang_analyzer' => [
'type' => 'string',
'doc_values' => true,
'store' => false,
'index' => 'no'
],
'date' => [
'type' => 'date',
'doc_values' => true
],
'feed_id' => [
'type' => 'integer'
],
'feed_subscribers' => [
'type' => 'integer'
],
'feed_canonical' => [
'type' => 'boolean'
],
'title' => [
'type' => 'string',
'store' => false,
],
'content' => [
'type' => 'string',
'store' => false,
],
'url' => [
'type' => 'string',
'analyzer' => 'simple',
'store' => false
]
]
]
]
]
Я затем отправить документы в mpercolate
API, 100
одновременно. Вот часть (1 документ) по mpercolate
запросу:
{
"percolate": {
"index": "articles_percolators",
"type": "article"
}
},
{
"doc": {
"title": "Win a Bench Full of Test Equipment",
"url": "\/document.asp",
"content": "Keysight Technologies is giving away a bench full of general-purpose test equipment.",
"date": 1421194639401,
"feed_id": 12240778,
"feed_subscribers": 52631,
"feed_canonical": 1,
"lang_analyzer": "en_analyzer"
}
}
100
изделия обрабатываются в ~1 second
на моем MacBook Pro 2,4 ГГц Intel Core i7 (4 ядра, 8 с HT) со всеми ядрами при максимуме:
Это кажется довольно медленным для меня, но у меня нет базы для сравнения.
У меня есть регулярный индекс с тем же отображением (но с 6 осколками) с более чем 3 миллиардами документов (все еще), живущих на одном сервере с 24 core
Xeon и 128GB
ОЗУ. Такие запросы ищут по всему индексу менее чем 100ms
(на горячем сервере).
Есть ли что-то явно неправильное в моей установке, и кто-то еще сравнивал производительность перколяторов? Я ничего не нашел в Интернете об этом ...
Моя ES-версия 1.4.2
с конфигурацией по умолчанию и рабочей нагрузкой полностью связана с процессором.
Редактировать
Поскольку John Petrone's
комментарий прямо о тестировании на производственной среде я сделала тест на том же 24 ядра Xeon, как мы используем в производстве. Результат с 8-кратным индексом для перколяции тот же, если даже хуже. Времена где-то между 1 и 1.2, в то время как сетевая латентность ниже, чем у моего ноутбука.
Это, вероятно, объясняется более низкой тактовой частотой для ядра для Xeon - 2.0GHz
против 2.4Ghz
для i7.
Это приводит к почти постоянной загрузке процессора около 800%:
Я тогда воссозданного индекс с 24 черепками и времени снизился до 0.8s на 100 документов, но с более чем в два раз процессорное время:
у меня есть постоянный поток около 100 документов в секунду, а количество запросов будет расти в будущем, так что это какое-то что меня беспокоит.
Есть ли способ профилировать запрос или запрос, посмотреть, что происходит и что потребляет циклы процессора, что-то вроде EXPLAIN MySQL? – Jacket
Какова ситуация спустя 2 года? –