You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Есть необходимость в свойствах которые не пишутся в базу данных, а только временно содержатся в памяти.
Аналог transient в языках программирования - чтобы свойство хранилось только в памяти и могло быть утеряно при перезапуске.
Use case:
имеется источник данных, который генерирует большое количество данных в единицу времени. В моём случае это mqtt обновления приходящие каждую секунду с более чем двумя десятками входных значений (go-e charger + controller). Если я регистрирую все параметры и привязываю к свойствам моего объекта(-ов), получаю большое количество обращений к БД. Ситуация усугубляется если есть необходимость хранить историю. Т.к. для истории достаточно хранить показания беря усредненные значения за последнюю минуту, то решением "в лоб" было по ежеминутному таймеру брать getHistoryAvg(-1 minute) и писать результат в другое свойство с более длинной историей. Это уменьшило количество данных в базе, но увеличило количество обращений к базе (ежесекундная запись, после ежеминутный рассчет среднего по последним шестидесяти значениям). В итоге убрав все лишнее, и оставив только самое необходимые свойства, имею >300 запросов к БД.
В качестве обходного решения, я завёл отдельные свойства без истории (назвал xxxBuffer), но пишу в них массив данных - при поступлении нового значения в исходное свойство, вызывается метод, который добавляет в конец xxxBuffer'а новое значение. А по таймеру, раз в минуту высчитывается среднее значение из массива xxxBuffer, и результат записывается в xxx свойство (которое уже с историей в базе). После чего xxxBuffer очищается. Скорость работы значительно возросла, однако по-прежнему каждую секунду происходит обновление:
исходного свойства, которое привязано к mqtt
промежуточного xxxBuffer
Если в распоряжении появится transient-свойства, то значительно уменьшится количество записей в базу.
The text was updated successfully, but these errors were encountered:
Есть необходимость в свойствах которые не пишутся в базу данных, а только временно содержатся в памяти.
Аналог transient в языках программирования - чтобы свойство хранилось только в памяти и могло быть утеряно при перезапуске.
Use case:
имеется источник данных, который генерирует большое количество данных в единицу времени. В моём случае это mqtt обновления приходящие каждую секунду с более чем двумя десятками входных значений (go-e charger + controller). Если я регистрирую все параметры и привязываю к свойствам моего объекта(-ов), получаю большое количество обращений к БД. Ситуация усугубляется если есть необходимость хранить историю. Т.к. для истории достаточно хранить показания беря усредненные значения за последнюю минуту, то решением "в лоб" было по ежеминутному таймеру брать getHistoryAvg(-1 minute) и писать результат в другое свойство с более длинной историей. Это уменьшило количество данных в базе, но увеличило количество обращений к базе (ежесекундная запись, после ежеминутный рассчет среднего по последним шестидесяти значениям). В итоге убрав все лишнее, и оставив только самое необходимые свойства, имею >300 запросов к БД.
В качестве обходного решения, я завёл отдельные свойства без истории (назвал xxxBuffer), но пишу в них массив данных - при поступлении нового значения в исходное свойство, вызывается метод, который добавляет в конец xxxBuffer'а новое значение. А по таймеру, раз в минуту высчитывается среднее значение из массива xxxBuffer, и результат записывается в xxx свойство (которое уже с историей в базе). После чего xxxBuffer очищается. Скорость работы значительно возросла, однако по-прежнему каждую секунду происходит обновление:
Если в распоряжении появится transient-свойства, то значительно уменьшится количество записей в базу.
The text was updated successfully, but these errors were encountered: