У меня есть много типов обновлений, которые я делаю к документам в моем кластере Elasticsearch. Большинство из них (по объему) являются upserts. Но script
обновления становятся все более распространенными, поскольку во многих ситуациях мне нужно увеличивать значение или выводить sh элемент в существующий массив. Это означает, что одно действие может создать несколько обновлений, набор upserts и сценариев, которые применяются в массовом обновлении.
У нас большой объем обновлений (сотни миллионов в день) для существующих документов, поэтому Я становлюсь обеспокоенным из-за накладных расходов, связанных с созданием большого количества небольших обновлений, а не больших загрузок. Я также обеспокоен тем, что обновления сценариев не так оптимальны, как upserts.
Но даже если я обеспокоен производительностью самих обновлений сценариев, имеет ли смысл объединять эти обновления, требующие сценария в сам скрипт?
Например. Пользователь может посетить страницу, и я хочу обновить дату last_seen, а также его навигатор и язык. Я также хочу увеличить количество раз, когда я видел этого пользователя. Для этого я буду использовать 2 обновления -
# Update 1
{
"_op_type": "update",
"doc": {
"last_seen": "2020-05-05 15:37:18",
"navigator": "chrome",
"lang": "en-us"
}
}
# Update 2
{
"script": {
"lang": "painless",
"source": """
ctx._source.total_visits += 1;
"""
}
}
Было бы более эффективно (дляasticsearch) сделать все это в обновлении скрипта?
{
"script": {
"lang": "painless",
"source": """
ctx._source.last_seen = new Date();
ctx._source.navigator = params.navigator;
ctx._source.lang = params.lang;
ctx._source.total_visits += 1;
""",
"params": {
"navigator": "chrome",
"lang": "en-US"
}
}
}
Я предполагаю, что скрипт применяет все изменения в памяти перед применением к indexes / ssd. Если это предположение верно, то я думаю, что если мне все равно придется применить обновление с помощью сценария, я мог бы также объединить их? Или, поскольку я использую массовое обновление и / или существует очередь записи, имеет ли значение даже то, что у меня так много небольших обновлений, если они все применяются одновременно?