В настоящее время я пытаюсь найти решение для оптимальной оптимизации данных, которые будут часто меняться. На сервере работает IIS/SQL Server, и это приложение ASP.NET Web API. Моя структура таблицы что-то вроде следующего:Решение для обработки данных, которые часто меняются
Таблица Пользователь: Идентификатор_пользователя PK
Таблица Статус: StatusID PK, Название VARCHAR
UserStatus Таблица: Идентификатор_пользователя PK (CLUSTERED), StatusID FK (НЕ-КЛАСТЕРИРОВАН), Дата DateTimeOffset (POSSIBLY INDEXED) - Это будет использоваться как истечение срока действия. Старые записи становятся неактуальными.
В таблице пользователей будет около 5000+ записей. Таблица состояния будет содержать около 500 записей. Таблица UserStatus имела бы частые изменения (изменяются каждые 5-30 секунд) на поля StatusID и Date в любом месте от 0 до 1000 пользователей в любой момент времени. Эта таблица UserStatus также будет иметь частые запросы SELECT, выполненные против него, а также фильтрацию записей со старыми/нерелевантными датами.
- Я рассмотрел заполнение таблицы UserStatus с записью для
каждого пользователя и только выполнения обновлений. Это означало бы, что
всегда будет ожидаемой записью и будет ограничивать проверки
для существования. Меня беспокоит производительность и все фрагменты
индексов. Затем я запрошу таблицу для записей с датами, которые относятся к нескольким минутам текущего времени. - Я рассмотрел только включение соответствующих записей в таблицу UserStatus , обновление, когда они существуют для пользователя, и запуск задачи, которая очищает старые/нерелевантные данные. Этот метод будет поддерживать количество записей вниз, но я должен был бы проверить наличие записей перед выполнением задачи, а индексы могут препятствовать производительности .
- Наконец-то я рассмотрел MemoryCache или что-то подобное. I не знаю много о кешировании в веб-API, но из того, что у меня есть , прошу об этом, я быстро решил против этого из-за потенциальных проблем параллелизма при итерации по кешу.
Есть ли у кого-нибудь рекомендации по поводу такого сценария? Есть ли другая методология, которую я не рассматриваю?
он упоминает «Старые записи становятся неактуальными.«с таким небольшим набором данных он мог бы использовать переменные таблицы @some_fancy_table, если он сохраняет соединение. Более подробная информация необходима, я думаю ... –
Спасибо за ответы. Если с помощью табличных переменных вы имеете в виду делать массовые вставки/обновления, это не работают по этому сценарию. Каждый пользователь будет отправлять свой статус на сервер независимо друг от друга потенциально так часто, как каждые 5-30 секунд. Только меньший поднабор пользователей будет транслировать свой статус на сервер, но каждый может запросить статус «активных» пользователей. Здесь появляются записи даты/нерелевантности. Например, только пользователи, которые, например, изменили статус за последние 5 минут, должны вернуться в оператор select. –