Как ежечасно эффективно запрашивать большую базу данных? - PullRequest
0 голосов
/ 18 июня 2020

Фон:

У меня есть несколько таблиц активов, хранящихся в базе данных красного смещения для каждого города, всего 8 городов. Эти таблицы активов отображают обновления статуса ежечасно. 8 SQL таблиц и около 500 миллионов строк данных в год. (У меня также есть доступ к серверу, который обновляет эти данные каждую минуту.)

Пример: На одном рынке может быть 20 тыс. Активов, отображающих 480 тыс. (20 тыс. * 24 часа) обновлений статуса в день.

Эти обновления статуса находятся в необработанном формате и должны быть меньше go процесс преобразования , который в настоящее время записан в виде SQL. Конечное состояние переходит в наш инструмент бизнес-аналитики (Таблица) для внешних заинтересованных сторон.

Проблема:

Текущий способ обработки данных медленный и неэффективный и, вероятно, нереалистичный c для ежечасного выполнения этого задания в Tableau. Преобразование статуса требует, чтобы я просматривал данные за 30 дней, поэтому мне действительно нужно оглядываться на историю на протяжении всего запроса.

Возможные решения:

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

  • Запустите сценарий python, который просматривает самое последнее обновление и запрашивает большую таблицу истории за 30 дней как задание cron и отправьте результат в таблицу в базе данных красного смещения.
  • Материализовать представление SQL и запускать инкрементное обновление sh каждый час
  • Поместите представление в Таблицу как datasource и запускать инкрементное обновление sh каждый час

Пожалуйста, дайте мне знать, как вы подойдете к этой проблеме. Мои знания в SQL, ограниченный опыт разработки данных, Tableau (Prep & Desktop) и сценарии в Python или R.

1 Ответ

1 голос
/ 19 июня 2020

Итак, обо всем по порядку - вы говорите, что обработка данных «медленная и неэффективная», и спрашиваете, как эффективно запросить большую базу данных. Сначала я посмотрю, как улучшить этот процесс. Вы указываете, что процесс основан на данных за последние 30 дней - выполняется ли сортировка, очистка и анализ больших таблиц по времени? При работе с большими таблицами важно максимально использовать преимущества метаданных. Убедитесь, что ваши предложения where эффективны при устранении блока таблицы фактов - не полагайтесь на предложения таблицы измерений where для выбора диапазона дат.

Затем посмотрите на свои ключи распределения и на то, как они влияют на потребность в ваших критических запрос для перемещения больших объемов данных по сети. Сеть междоузлий имеет самую низкую пропускную способность в кластере Redshift, и ненужная передача большого количества данных через нее сделает работу медленной и неэффективной. Использование ЧЕТНОГО распределения может снизить производительность в зависимости от вашего шаблона запроса.

Теперь позвольте мне перейти к вашему вопросу и перефразировать - «что лучше: использовать сводные таблицы, материализованные представления или внешнее хранилище (источник данных tableau) для хранения сводных данных, обновляемых ежечасно?» Все 3 работают и у каждого есть свои плюсы и минусы.

  1. Сводные таблицы хороши тем, что вы можете выбрать распределение хранилища данных, и если эти данные необходимо объединить с другими таблицами базы данных, это можно сделать наиболее эффективно. Тем не менее, требуется больше управления данными, чтобы поддерживать эти данные в актуальном состоянии и синхронизировать c.
  2. Материализованные представления хороши тем, что гораздо меньше действий управления, о которых нужно беспокоиться - при изменении данных , просто обновите sh вид. Данные все еще находятся в базе данных, поэтому их легко объединить с другими таблицами данных, но, поскольку у вас нет контроля над хранением данных, это действие может быть не самым эффективным.
  3. Внешнее хранилище хорошо данные находятся в вашем инструменте бизнес-аналитики, поэтому, если вам нужно повторно получить результаты в течение часа, данные будут локальными. Однако он не привязан к вашему инструменту бизнес-аналитики и гораздо менее эффективен для объединения с другими таблицами базы данных.

Сводные данные обычно не такие большие, поэтому то, как они хранятся, не вызывает большого беспокойства, и я немного ленив, поэтому я бы go использовал материализованное представление. Как я уже сказал в начале, я сначала посмотрю на «медленные и неэффективные» запросы, которые выполняю каждый час.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...