Как выполнить загрузку в режиме реального времени в Amazon Redshift?

Мы оцениваем Amazon Redshift для хранения данных в реальном времени.

Данные будут передаваться и обрабатываться через службу Java, и они должны храниться в базе данных. Мы обрабатываем строку за строкой (в режиме реального времени), и мы будем вставлять только одну строку для каждой транзакции.

Как лучше всего загружать данные в Amazon Redshift в реальном времени?

Должны ли мы использовать JDBC и выполнить INSERT INTO заявления, или попытаться использовать Kinesis Firehose, или, возможно, AWS Lambda?

Я обеспокоен использованием одного из этих сервисов, потому что оба будут использовать Amazon S3 в качестве промежуточного уровня и выполнять COPY команда, которая подходит для больших наборов данных, а не для вставок "в одну строку".

2 ответа

Решение

Неэффективно использовать индивидуальное INSERT заявления с Amazon Redshift. Он спроектирован как хранилище данных и обеспечивает очень быстрые запросы SQL. Это не база данных для обработки транзакций, где данные часто обновляются и вставляются.

Рекомендуется загружать партии (или микропартии) через COPY команда. Kinesis Firehose использует этот метод. Это гораздо более эффективно, потому что несколько узлов используются для параллельной загрузки данных.

Если вы серьезно относитесь к обработке данных в режиме реального времени, то Amazon Redshift может оказаться не самой лучшей базой данных для использования. Подумайте об использовании традиционной базы данных SQL (например, предоставляемой Amazon RDS), базы данных NoSQL (например, Amazon DynamoDB) или даже Elasticsearch. Вы должны выбрать использование Redshift только в том случае, если вы сосредоточены на создании отчетов для больших объемов данных, обычно включающих множество объединений таблиц.

Как указано в рекомендациях Amazon Redshift для загрузки данных:

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

Лучшим вариантом является Kinesis Firehose, который работает над сериями событий. Вы записываете события в Firehose, одно за другим, и они группируются оптимальным образом, исходя из вашего определения. Вы можете определить, сколько минут для пакетной обработки событий или размер пакета в МБ. Возможно, вы сможете быстрее вставить событие в Redshift с помощью INSERT, но этот метод не масштабируется. COPY предназначена для работы практически в любом масштабе.

Другие вопросы по тегам