Если возможно, реструктурируйте свое приложение так, чтобы вместо выгрузки простого текста в файл журнала вы непосредственно записывали структурированную информацию журнала в нечто вроде Elasticsearch.Спасибо позже.
Это не всегда возможно (например, если вы не контролируете источник журнала).У меня есть несколько мнений о ваших решениях.
- Это кажется супер хрупким .Elasticsearch не основывается
_id
на свойствах конкретного документа.Он выбран на основе существующих _id
полей, которые он сохранил (и я думаю, что также от случайного начального числа).Даже если это может сработать, использование недокументированного свойства - это хороший способ выстрелить себе в ногу при работе с командой, которая вносит серьезные изменения даже в свой документированный код так же часто, как Elasticsearch. - Этот на самом деле не так уж и плохо .Elasticsearch поддерживает ручной выбор идентификатора документа.Даже если это не так, он работает довольно хорошо для запросов с массовыми терминами и не будет таким узким местом, как вы думаете.Если у вас действительно так много данных, что это может сломать ваше приложение, то Elasticsearch, возможно, не лучший инструмент.
Это решение великолепно .Он очень расширяемый и не зависит от сложной зависимости от того, как построен файл журнала, как вы решили индексировать этот журнал в Elasticsearch и как вы решили читать его с помощью Python.Скорее вы просто получаете документ, и если вам нужно обновить его, вы делаете это обновление.
Elasticsearch на самом деле не является худшей точкой отказа здесь, чем раньше (если ES выходит из строя, ваше приложение выходит из строя влюбое из этих решений) - вы просто делаете вдвое больше запросов (чтение и запись).Если ваше приложение убивает фактор 2, вам нужно либо лучшее решение проблемы (т.е. избегать Elasticsearch), либо вам нужно больше оборудования.ES поддерживает все виды конфигураций сегментирования, и вы можете сделать надежный сервер по доступной цене.
Один вопрос, почему у вас есть журналы в Elasticsearch, которые необходимо обновить именно с этимнормальное / вредоносное свойство?Если вы тот, кто помещает их в ES, просто пометьте их соответствующим образом, прежде чем хранить их, чтобы предотвратить лишнее чтение, которое вас беспокоит.Если это не вариант, то вы все равно, вероятно, захотите прочитать ES напрямую, чтобы в любом случае перетащить журналы в Python, чтобы избежать огромных затрат на повторный анализ исходного файла журнала.
Если это однократныйИсправьте существующие ES-данные, пока вы работаете с обычным или вредоносным ПО, тогда не беспокойтесь об увеличении скорости в 2 раза.Просто дросселируйте запрос, если вы беспокоитесь о сбое кластера.Исправление будет выполнено в конце концов, и, вероятно, быстрее, чем если бы мы продолжали обдумывать лучший вариант.