Я пишу приложение с доказательством концепции, которое предназначено для передачи данных в реальном времени по клику со скоростью около 1000 сообщений в секунду и записи в Amazon Redshift.
Я изо всех сил пытаюсь получить что-то вроде производительности, которую некоторые другие утверждают (например, здесь).
Я запускаю кластер с 2 x dw.hs1.xlarge узлами (+ лидер), а машина, выполняющая нагрузку, является экземпляром EC2 m1.xlarge на том же VPC, что и кластер Redshift, работающий на 64-битном Ubuntu 12.04 0,1.
Я использую Java 1.7 (openjdk-7-jdk из репозиториев Ubuntu) и драйвер Postgresql 9.2-1002 (главным образом потому, что он единственный в Maven Central, который упрощает мою сборку!).
Я пробовал все методы, показанные здесь, за исключением последнего.
Я не могу использовать COPY FROM
, потому что мы хотим загружать данные в "реальном времени", поэтому установка его через S3 или DynamoDB на самом деле не является вариантом, и Redshift по какой-то причине не поддерживает COPY FROM stdin
.
Вот выдержка из моих журналов, показывающая, что отдельные строки вставляются со скоростью около 15 секунд:
2013-05-10 15:05:06,937 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Beginning batch of 170
2013-05-10 15:05:18,707 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Done
2013-05-10 15:05:18,708 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Beginning batch of 712
2013-05-10 15:06:03,078 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Done
2013-05-10 15:06:03,078 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Beginning batch of 167
2013-05-10 15:06:14,381 [pool-1-thread-2] INFO uk.co...redshift.DatabaseWriter - Done
Что я делаю неправильно? Какие другие подходы я могу взять?