У нас есть сервер API, который обслуживает около 500 000 запросов в день. Мы хотим сохранить все эти правила в базе данных, чтобы иметь возможность анализировать данные. Мы регистрируем такие вещи, как:База данных для хранения большой таблицы журналов
- Кто сделал запрос
- Сколько времени это займет
- Дата и время
- Http код ответа
- Что апи ресурс просил (URL)
- кэширования данных ответа или нет (BOOL)
- +++
Мы хотим сохранить эти журналы в течение 3 месяцев, что приведет к примерно 45 000 000 записей в этой базе данных. Когда записи старше 3 месяцев, они удаляются.
Хранение этих 45 миллионов записей в базе данных sql возможно, но тогда очень медленно выполнять любой анализ этих данных. Мы хотели бы провести обширный анализ, например: сколько запросов сделал пользователь сегодня, по сравнению с тем же днем на прошлой неделе? Сколько процентов запросов провалилось сегодня по сравнению с каким-либо другим днем? См. Диаграмму тенденций, показывающую, идет ли число запросов вверх или вниз. См. 10 лучших ресурсов, запрашиваемых в данный момент времени. Вы понимаете это - мы хотим иметь возможность делать все подобные анализы.
Можете ли вы дать какие-либо рекомендации относительно того, где хранить эти журналы, чтобы иметь возможность делать такой анализ в реальном времени (или в режиме реального времени)? Любая база данных nosql, которая может быть хороша для этого? Azure? Я вижу, что есть что-то, называемое azure sql datawarehouse, может ли это быть использовано для этого? Я рассмотрел Microsoft Power Bi, который, вероятно, будет полезен для анализа этих данных, но где я храню данные.
Я бы очень признателен, если у кого-то есть предложения для меня.
Почему вы пишете, что сервер sql медленно управляет 45 M-рекордами? Для хорошо сконфигурированного sql-сервера 45 M строк - это небольшой объем данных. –
Он может обрабатывать 45 миллионов записей - я его протестировал, но выполнение всех видов агрегаций происходит медленно (например, группировка на пользователя и resourcerl и подсчет строк с кодом ошибки занимает много времени). Поэтому, даже если это возможно сделать с помощью обычного SQL-сервера, если я потрачу достаточно времени на его настройку, я считаю, что это не правильный инструмент в этом случае. – rgullhaug
Для SQL Server на 45-миллиметровых строках вам обязательно нужны индексы для поддержки ваших запросов, например. на внешний ключ и обычно отфильтрованные столбцы (пользователь, resourcerl, код ошибки). Индексы Columnstore дают лучшую производительность. Вы также можете рассмотреть раздел таблицы, например. в назначенную дату. Это добавляет к сложности вашего ETL, но ускоряет запросы за счет сокращения ввода-вывода. –