Что такое хорошее решение AWS (DB, ETL, Batch Job) для хранения больших исторических торговых данных (с ежедневным обновлением) для анализа машинного обучения? - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу создать систему машинного обучения с большим количеством исторических торговых данных для целей машинного обучения (программа Python).

Торговая компания имеет API для сбора исторических данных и данных в реальном времени.Объем данных составляет около 100G для исторических данных и около 200M для ежедневных данных.

Торговые данные - это типичные данные временного ряда, такие как цена, имя, регион, график времени и т. Д. Формат данных может быть получен в виде больших файлов или сохранен в реляционной БД.

Итак, мой вопрос: каков наилучший способ хранения этих данных в AWS и каков наилучший способ добавлять новые данные каждый день (например, с помощью задания cron или задания ETL)?Возможные решения включают хранение их в реляционных базах данных, таких как базы данных Or NoSQL, таких как DynamoDB или Redis, или сохранение данных в файловой системе и непосредственное чтение программой Python.Мне просто нужно найти решение для сохранения данных в AWS, чтобы несколько групп могли получить данные для исследования.

Кроме того, поскольку это исследовательский проект, я не хочу тратить слишком много времени на изучение новых систем или новых технологий.Я знаю, что есть базы данных временных рядов, такие как InfluxDB или новый Amazon Timestream.Учитывая кривую обучения и требования к срокам, я не склонен изучать и использовать их сейчас.

Я знаком с MySQL.Если действительно нужно, я могу взять NoSQL, например, Redis / DynamoDB.

Есть совет?Большое спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы хотите использовать AWS EMR, то, вероятно, самое простое решение - просто запустить ежедневное задание, которое сбрасывает данные в файл в S3.Тем не менее, если вы хотите использовать что-то более SQL-е, вы можете загрузить все в Redshift.

Если ваша цель состоит в том, чтобы сделать его доступным в той или иной форме для других людей, то вам непременно следует поместить данные в S3.AWS имеет ETL и инструменты переноса данных, которые могут перемещать данные из S3 в различные пункты назначения, поэтому другие люди не будут ограничены в использовании данных только из-за того, что они хранятся в S3.

Кроме того, S3 является самым дешевым (теплым) вариантом хранения, доступным в AWS, и для всех практических целей его использование неограниченно.Если вы храните данные в базе данных SQL, вы значительно ограничиваете скорость, с которой эти данные могут быть получены.Если вы храните данные в базе данных NoSQL, возможно, вы сможете поддерживать больший трафик (возможно), но это будет стоить немало.

Просто чтобы проиллюстрировать мою точку зрения, я недавно провел эксперимент по проверке некоторых свойств одного из API-интерфейсов S3, и часть моего эксперимента заключалась в загрузке ~ 100 ГБ данных в S3 из экземпляра EC2.Я смог загрузить все эти данные всего за несколько минут, и это стоило почти ничего.

Единственное, что вам нужно решить, это формат ваших файлов данных.Вам следует поговорить с некоторыми другими людьми и выяснить, предпочитают ли Json, CSV или что-то еще.

Что касается добавления новых данных, я бы настроил лямбда-функцию, которая запускается событием CloudWatch.Лямбда-функция может получить данные из вашего источника данных и поместить их в S3.Триггер события CloudWatch основан на cron, поэтому достаточно легко переключаться между почасовой, ежедневной или любой другой частотой, соответствующей вашим потребностям.

...