У меня есть клиент-серверная архитектура, написанная на .NET, где сотни клиентов отправляют данные на один сервер.Каждый элемент имеет идентификатор, и разные клиенты могут отправлять один и тот же идентификатор несколько раз.
Идентификаторы являются длинными, и сервер должен знать, получил ли он уже что-то с тем же идентификатором.Каждый день сервер будет получать около 10 000 000 идентификаторов с ~ 1 000 000 дубликатов.Каждый раз, когда он получает идентификатор, ему нужно будет выполнить какой-то поиск, чтобы увидеть, был ли он уже обработан.Чрезвычайно маловероятно получить дубликат идентификатора через несколько дней.
Мои текущие идеи для решений:
В памяти словарь идентификаторов с фоновым потоком для удалениялюбые элементы после того, как они были в словаре более 3 дней.
База данных MySql с одним индексированным столбцом для идентификаторов и столбцом для даты вставки.
Проблемы, с которыми я сталкиваюсь, заключаются в том, с какой скоростью будет выполняться запрос к базе данных MySql, потому что мне приходится выполнять ~ 10 000 000 запросов в день.Я не собираюсь использовать причудливое оборудование для этой конкретной проблемы (типичная система разработки) и не хочу облагать налогом 100%.Проблема с решением в памяти состоит в том, что будет сложно написать фоновый рабочий (параллелизм), и все потеряно в маловероятном, но возможном сбое.