Я хотел бы попросить вашего совета специалиста по работоспособной архитектуре в C #.
У меня есть служба C #, которая отвечает на запрос локального пользователя в локальной сети, получает пакеты данных из Интернета.и обрабатывает эти данные для создания массивов данных в структуре.Каждый запрос данных занимает около 2 секунд и возвращает 4000 байтов.Может быть десятки тысяч запросов в день.
Чтобы ускорить все и уменьшить пропускную способность, мне нужно кэшировать результаты перехвата данных, чтобы 2-й и последующий доступы мгновенно передавались любым другим пользователям налокальная сеть (может быть> 50 пользователей).
Ограничения:
- Базовые данные никогда не меняются, т.е. мне не нужно беспокоиться о «грязных» данных (отлично!).
- Данные, которые я хочу кэшировать, представляют собой довольно сложную структуру, которая содержит вложенные массивы DateTime, удваивается и т. Д. Данные обрабатываются с использованием большого количества математических данных из данных, поступающих из Интернета.
- Я не могу использовать более 100 МБ памяти независимо от того, сколько данных кэшируется (т. Е. Размер кэша должен быть ограничен).
- Я не могу индексировать данные в кэше с помощьючисловой индекс, я должен индексировать его с помощью комбинации даты ("ГГГГ-ММ-ДД") и уникальной строки идентификатора ("XXXXXXXX").
- Это должно быть быстро, то есть он должен служитьбольшинство его ответов из оперативной памяти.
- данные в кэше должны сохраняться на диск каждые 24 часа.
Вот мои варианты на данный момент:
- Кэшируйте данные в классе сервера, используя частные переменные(то есть личный список или словарь), затем периодически сериализуйте его на диск;
- Используйте базу данных;
Меня интересует ваше мнение эксперта.