В моей организации несколько устройств отправляют данные каждую секунду. Данные обрабатываются и разделяются в AWS S3 следующим образом /year=YYYY/month=MM/day=DD/file.csv.

Используя AWS Athena, мы используем для выполнения таких запросов: SELECT col1, col2, coln FROM data WHERE year = 'YYYY' AND month = 'MM' and DAY = 'dd' AND device_id = 123 для получения данных с одного устройства в течение некоторого времени в день. Иногда нам также нужно получать данные с нескольких устройств (device_id IN (...)) и в разное время. Обратите внимание, что столбцы device_id и ts существуют в наборе данных, и только ts используется для создания разделов.

Вот мой вопрос:

Будет ли этот метод разделения эффективен в долгосрочной перспективе? В настоящее время у нас всего около 150 активных устройств, но мы планируем масштабировать их до 1000 и более. Учитывая тот факт, что схема запроса будет такой же (получение данных для некоторого устройства в определенное время), лучше ли разделить по device_id, а затем по дате (/devive_id/year=YYYY/month=MM/day=DD/file.csv)?

0
Marius 10 Фев 2021 в 02:48

1 ответ

Лучший ответ

Разделение очень хорошо подходит для предоставленного вами запроса - для этого единственного дня данных нужно будет искать только в одном подкаталоге.

Однако, если бы вы запрашивали конкретное устройство за все время (без указания месяца / дня), это было бы неэффективно.

Вам нужно будет решить, что будет более распространенным:

  • Если всегда будет запрашиваться определенное устройство, то разбейте его по Устройству, а затем по дате.
  • Если всегда будет запрашиваться определенный день / месяц, то ваш текущий метод подойдет (возможно, с дополнительным разделом устройства после дня)
2
John Rotenstein 10 Фев 2021 в 02:57