RezaCsharp Ответов: 2

Динамическая проверка состояния


Дорогие все, если кто-нибудь может помочь мне в следующем проекте, это было бы действительно потрясающе,
есть некоторые устройства, которые будут работать при определенных условиях, таких как температура погоды, время, дата и т. д,
мы хотим разработать сервис для наших клиентов чтобы спроектировать их состояние для своих устройств например если погода дождливая и время половина пятого будет запущена ирригационная система,

для проектирования динамического состояния нет никаких проблем , основная проблема заключается в том, что мы хотим хранить все операторы пользовательского состояния на наших серверах и проверять условия сервера в режиме реального времени, и если какое-либо условие было истинным, то отправить команду на наши следующие устройства через нашу облачную систему.Как IFTTT

вот теперь вопрос: существует ли какой-либо алгоритм быстрой проверки тысячи условий для нескольких пользователей и устройств,

есть ли какая-либо альтернатива с открытым исходным кодом для IFTTT, чтобы увидеть, как они проверяют миллионы условий вовремя и быстро реагируют в свое точное время.

если бы какой-нибудь образец на основе C# или .net был бы действительно отличным.

Что я уже пробовал:

Облачный сервер сделали, динамический создатель условий сделали с помощью json, все условия хранят на сервере, в настоящее время он работает, но я думаю, что если условия увеличились и будут сложными, мой алгоритм не очень хорошо справляется с этим, потому что есть цикл для проверки всех условий за один раз ( условия, которые влияют на текущее время )

2 Ответов

Рейтинг:
2

Garth J Lancaster

Мне всегда нравилась идея хранения условий / "правил" в виде строк, которые затем можно хранить в базе данных, а затем использовать Roslyn для их оценки - это своего рода дает идею eval в C# – Roslyn (Microsoft CodeAnalysis CSharp Scripting NuGet Package) – блог Марио Мукало[^]


RezaCsharp

можно ли выполнять большое количество правил одновременно, используя эту функцию, я читал статью, кажется хорошей , но я видел цикл в статье, кажется критичным здесь, как вы думаете, достаточно ли он быстр, чтобы обрабатывать тысячи правил или даже миллион? подумайте, что есть много пользователей, которые могут определять свои собственные правила

Garth J Lancaster

Честно говоря, я не знаю - кстати, это тоже может помочь

https://www.nrecosite.com/nrecoframework/common_library_net.aspx
https://github.com/nreco/lambdaparser

Итак, что бы я сделал при запуске программы, это загрузил и скомпилировал все правила/выражения и сохранил их предварительно скомпилированными, возможно, в хэше/словаре, тем самым сократив время для шага оценки. Затем на приуроченном событии или что-то еще, запустите хотя бы "правила" с данными

Рейтинг:
0

RickZeeland

Я думаю, что то, что вы хотите, это Механизм на основе правил[^]