Лучший дизайн / технология для хранения быстро растущего объема данных - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно хранить сигналы, поступающие от миллионов устройств каждую 1 минуту, где каждый объект сигнала имеет 4 атрибута плюс отметка времени:

  • Идентификатор устройства, всегда один и тот же
  • Attr1, всегда одинаково (модель устройства)
  • Attr2, меняется каждые 6 месяцев. (фиксированное местоположение устройства)
  • Attr3, меняется каждые 2-4 недели (версия прошивки устройства)

С собранными данными мне нужно получить несколько отчетов, например, «Сколько устройств с attr2 проверено в прошлом месяце». Здесь есть ограничение: мне может понадобиться фильтровать и группировать по любому атрибуту, а не только по идентификатору устройства.

Мой первый подход состоял в том, чтобы иметь модель с вложенными записями в bigquery, но я не уверен, что это будет лучшим решением.

Какую базу данных и схему вы бы порекомендовали мне для решения этой проблемы?

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Интересная проблема - BigQuery может переварить с этой скоростью (ограничение составляет 100K записей в секунду на проект), но похоже, что DeviceId - это ваш ключ, поэтому имеет смысл представить его как не вложенный столбец - в данном случае - без вложенных столбцов - высокая цена за хранение, но очень эффективные запросы. В качестве альтернативы вы можете использовать Attr1, Attr2, Attr3 в качестве ключевых столбцов и список deviceId в качестве вложенного столбца - будет наиболее эффективным с точки зрения хранилища - но может быть не очень хорошим с точки зрения аналитического запроса.

Другие варианты для вас, чтобы хранить только изменения (или ежедневные / почасовые агрегаты) (поэтому вам не важно знать, что отчет конкретного устройства в 10:01, 10:02, 10:03, и вы в порядке, скажем, знать, что устройство сообщалось 5 мая 2018 года (или, по крайней мере, в 10 час 5 мая 2018 года) В этом случае вы можете реализовать какое-то решение в памяти (например, appengine), которое будет ожидать изменения статуса устройства и только в этом случае передавать данные в BigQuery

...