Это старая версия документа!
Название функции | Назначение |
---|---|
getCalibrationNameAndSerial(calibrationData) | функция возвращает имена приборов и их серийные номера, в случае, если для них есть калибровочные коэффициенты |
readAndParseCalibrationFile(file) | асинхронная функция предназначена для чтения и парсинга JSON-файла с данными о калибровке. |
getCalibrationSensorNames(calibrationData) | функция возвращает массив с названиями сенсоров для калибровки |
getAllRedisKeys() | асинхронная функция для получения всех ключей из Redis |
getNecessaryKeys(startDate, endDate, keysArray) | функция выполняет фильтрацию массива ключей (keysArray) на основе заданного временного диапазона |
checkDateRangeInRedis(formattedStartDate, formattedEndDate, keysArray) | функция проверяет, находится ли заданный временной диапазон внутри или частично пересекается с временным диапазоном, представленным в массиве keysArray |
sortRedisKeys(keysArray) | функция для сортировки массива ключей Redis |
sortedAndFilteredKeys(formattedStartDate, formattedEndDate) | асинхронная функция для получения отсортированных и отфильтрованных ключей из Redis |
updateDataInRedis(url) | асинхронная функция для добавления данных в Redis |
processAndAggregateLastMeasurements(respondParsed, keysArray) | функция для обработки данных (для запросов last_measurements) |
processAndAggregateResponsesList(respondParsed, keysArray) | функция для обработки данных (для запросов list) |
downloadPage(url) | асинхронная функция выполняет запрос по указанному URL и возвращает ответ |
requestAdditionalDataIfMissing(formattedStartDate, formattedEndDate, filteredKeys) | асинхронная функция для дозапроса данных |
respondToDataQuery(keys) | функция предназначена для получения значений по заданным ключам |
respondToDataQueryParsed(keys) | функция предназначена для получения значений по заданным ключам |
applyCalibrationsToData(calibrationData, filteredResponse) | функция выполняет калибровку данных |
В программе использована конвейерная обработка данных для сведения к минимуму задержек при множественных операциях. Конвейерная обработка в Redis представляет собой метод повышения эффективности, позволяющий одновременно выполнить несколько команд без ожидания ответа на каждую отдельную команду.
Шаг 1: Получаем ответ от внешнего источника данных
const databaseResponse = await downloadPage(url);
Шаг 2: Получаем массив ключей из ответа
const keys = Object.keys(databaseResponse);
Шаг 3: Объявляем конвейеры для проверки наличия ключей в Redis и добавления данных
const existsPipeline = redis.pipeline(); const updatePipeline = redis.pipeline();
Шаг 4: Добавляем команды проверки наличия в Redis для каждого ключа в конвейер
for (const key of keys) { const currentDate = databaseResponse[key].Date; existsPipeline.exists(currentDate); }
Шаг 5: Запускаем конвейер проверки наличия и ждём результат
const existsResults = await existsPipeline.exec();
Шаг 6: Добавляем данные для отсутствующих ключей
for (let i = 0; i < keys.length; i++) { const key = keys[i]; const currentDate = databaseResponse[key].Date; const keyExistsInRedis = existsResults[i][1] === 1; if (!keyExistsInRedis) { const newDataArray = JSON.stringify(databaseResponse[key]); updatePipeline.set(currentDate, newDataArray, 'EX', REDIS_EXPIRY_SECONDS); } }
Шаг 7: Запускаем конвейер добавления данных и ждём результат
await updatePipeline.exec();