Привет! Суть такая: я пытаюсь обрабатывать BLE-рекламы в офлайн-режиме. Нужно сохранять JSON-файл размером 4096 байт каждые 1-2 секунды. Потом я отправляю все файлы и удаляю их, когда MQTT-брокер снова подключается. Проблема в команде [/file find name=$fileName]. При большом количестве файлов она жрёт 100% CPU.
Вот функция, которая создаёт имя файла с счётчиком в конце, чтобы всегда получать уникальное имя:
:global getFileName do={
:local counter 0
:local fileName ("test/toto" . $counter . ".json")
:while ([/file find name=$fileName] != "") do={
:set counter ($counter + 1)
:set fileName ("test/toto" . $counter . ".json")
}
:return $fileName
}
Отчёт:
- Меньше 50 файлов — загрузка CPU от 60% до 100%, ответ быстрый.
- Около 100 файлов — 100% CPU, но команда возвращается за ~200 мс.
- Более 1000 файлов — 100% CPU, команда начинает отрабатывать только через 3 секунды (а у меня файл надо сохранять каждые 1-2 секунды XD).
P.S. Реальное имя файла формируется по дате и времени, но если размер файла превышает 4096 байт, я создаю 2 файла с одинаковым именем, и тогда функция getFileName срабатывает вдвое дольше…
Пример:
2023-10-09-13:02:41-8580.json
2023-10-09-13:02:41-8581.json
Вот функция, которая создаёт имя файла с счётчиком в конце, чтобы всегда получать уникальное имя:
:global getFileName do={
:local counter 0
:local fileName ("test/toto" . $counter . ".json")
:while ([/file find name=$fileName] != "") do={
:set counter ($counter + 1)
:set fileName ("test/toto" . $counter . ".json")
}
:return $fileName
}
Отчёт:
- Меньше 50 файлов — загрузка CPU от 60% до 100%, ответ быстрый.
- Около 100 файлов — 100% CPU, но команда возвращается за ~200 мс.
- Более 1000 файлов — 100% CPU, команда начинает отрабатывать только через 3 секунды (а у меня файл надо сохранять каждые 1-2 секунды XD).
P.S. Реальное имя файла формируется по дате и времени, но если размер файла превышает 4096 байт, я создаю 2 файла с одинаковым именем, и тогда функция getFileName срабатывает вдвое дольше…
Пример:
2023-10-09-13:02:41-8580.json
2023-10-09-13:02:41-8581.json
