2016-06-28 2 views
2

У нас есть сервер API, который обслуживает около 500 000 запросов в день. Мы хотим сохранить все эти правила в базе данных, чтобы иметь возможность анализировать данные. Мы регистрируем такие вещи, как:База данных для хранения большой таблицы журналов

  • Кто сделал запрос
  • Сколько времени это займет
  • Дата и время
  • Http код ответа
  • Что апи ресурс просил (URL)
  • кэширования данных ответа или нет (BOOL)
  • +++

Мы хотим сохранить эти журналы в течение 3 месяцев, что приведет к примерно 45 000 000 записей в этой базе данных. Когда записи старше 3 месяцев, они удаляются.

Хранение этих 45 миллионов записей в базе данных sql возможно, но тогда очень медленно выполнять любой анализ этих данных. Мы хотели бы провести обширный анализ, например: сколько запросов сделал пользователь сегодня, по сравнению с тем же днем ​​на прошлой неделе? Сколько процентов запросов провалилось сегодня по сравнению с каким-либо другим днем? См. Диаграмму тенденций, показывающую, идет ли число запросов вверх или вниз. См. 10 лучших ресурсов, запрашиваемых в данный момент времени. Вы понимаете это - мы хотим иметь возможность делать все подобные анализы.

Можете ли вы дать какие-либо рекомендации относительно того, где хранить эти журналы, чтобы иметь возможность делать такой анализ в реальном времени (или в режиме реального времени)? Любая база данных nosql, которая может быть хороша для этого? Azure? Я вижу, что есть что-то, называемое azure sql datawarehouse, может ли это быть использовано для этого? Я рассмотрел Microsoft Power Bi, который, вероятно, будет полезен для анализа этих данных, но где я храню данные.

Я бы очень признателен, если у кого-то есть предложения для меня.

+1

Почему вы пишете, что сервер sql медленно управляет 45 M-рекордами? Для хорошо сконфигурированного sql-сервера 45 M строк - это небольшой объем данных. –

+0

Он может обрабатывать 45 миллионов записей - я его протестировал, но выполнение всех видов агрегаций происходит медленно (например, группировка на пользователя и resourcerl и подсчет строк с кодом ошибки занимает много времени). Поэтому, даже если это возможно сделать с помощью обычного SQL-сервера, если я потрачу достаточно времени на его настройку, я считаю, что это не правильный инструмент в этом случае. – rgullhaug

+0

Для SQL Server на 45-миллиметровых строках вам обязательно нужны индексы для поддержки ваших запросов, например. на внешний ключ и обычно отфильтрованные столбцы (пользователь, resourcerl, код ошибки). Индексы Columnstore дают лучшую производительность. Вы также можете рассмотреть раздел таблицы, например. в назначенную дату. Это добавляет к сложности вашего ETL, но ускоряет запросы за счет сокращения ввода-вывода. –

ответ

2

Power BI потенциально является хорошим решением для вас. Он фактически закручивает экземпляр служб SQL Server Analysis Services в памяти, который фактически является «хранилищем данных OLAP». Требования к инфраструктуре минимальны по мере разработки в бесплатном инструменте PBI Desktop и публикуются в облаке Microsoft для пользователей веб-сайтов PBI.

Есть лимиты для данных, которые могут быть опубликованы - см. Ссылку ниже. Обратите внимание, что PBI использует очень эффективное сжатие Vertipac, поэтому наборы данных, как правило, намного меньше, чем ваши необработанные данные.Я часто вижу 10k - 50k строк на MB, так что 45m должны быть достижимы с одной лицензией Pro. Безжалостно отфильтруйте список столбцов в PBI Desktop, чтобы оптимизировать это.

https://powerbi.microsoft.com/en-us/documentation/powerbi-admin-manage-your-data-storage-in-power-bi/

С PBI Pro лицензии вы можете обновить ежечасно, до 8 раз в день:

https://powerbi.microsoft.com/en-us/documentation/powerbi-refresh-data/

базы данных Строительство SQL и/SSAS решений OLAP была хорошая карьера для меня более последние 20 лет. Это решение «Rolls Royce», если у вас есть время и деньги. Но через 20 лет я все еще учусь, поскольку это технически сложная область. Если у вас еще нет этих навыков, я предлагаю Power BI стать более продуктивным путем.

+0

Perfect. Спасибо. Я провел день с Power BI, и теперь мои журналы были переданы в Power BI в реальном времени с использованием REST api :) Единственная проблема теперь в том, что я добавлю около 500 000 записей в среднем день, поэтому, если я ничего не удалю Через несколько месяцев я получу ограничение 10 ГБ. Любая идея, как я могу это решить? Похоже, что удалить строки из набора данных невозможно (единственный вариант - удалить все строки). – rgullhaug

+1

REST API является совершенно новым и имеет ощущение «Версия 1». Я бы не рекомендовал его для сценария производства на данном этапе, особенно на этих томах. Я представлял себе «традиционный Power BI» маршрут файлов, загружаемых с помощью Power BI Desktop, с отчетом, опубликованным на веб-сайте Power BI, и обновленным с использованием шлюза. Вы можете указать Power BI Desktop в папке с файлами и отфильтровать список найденных файлов, чтобы удалить старый контент. –

1

Вы абсолютно хотите хранить свои журналы в базе данных SQL OLTP. Сама природа таблицы журналов является транзакционной, вы будете постоянно ее обновлять и получат выгоду от скорости совершения транзакций.

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

only Способ получения отчетов в режиме реального времени заключается в создании отчетов поверх базы данных OLTP. Если вы можете жить с небольшой задержкой, большинство мест предпочитают перестраивать свои кубы на ночь, что обеспечит почти мгновенные отчеты о 24-часовой задержке.

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

+0

ОК, большое вам спасибо :) Я проверю, могу ли я заставить это работать, сохраняя журнал в базе данных sql, которую я сейчас использую, но затем передаю журналы в базу данных данных azure sql для отчетности. Я могу жить с небольшой задержкой, но не через 24 часа. 1 час - мой максимум. Надеюсь, это возможно. – rgullhaug

+0

Несомненно, это просто означает настроить почасовую работу, чтобы обновить таблицы размеров. –

Смежные вопросы