У меня есть кластер красных смещений, который я использую для некоторых аналитических приложений. У меня есть входящие данные, которые я хотел бы добавить в таблицу clicks
. Допустим, у меня есть ~ 10 новых "кликов", которые я хочу хранить каждую секунду. Если возможно, я бы хотел, чтобы мои данные были доступны как можно скорее в режиме красного смещения.
Из того, что я понимаю, из-за столбчатого хранилища производительность вставки плохая, поэтому вставлять ее нужно партиями. Мой рабочий процесс заключается в том, чтобы хранить клики в Redis, и каждую минуту я вставляю ~ 600 кликов из Redis в красное смещение в виде пакета.
У меня есть два способа вставить партию кликов в красное смещение:
-
Multi-row insert strategy
: Я использую регулярныеinsert
запрос для вставки несколько строк. Многострочная вставка документации здесь -
S3 Copy strategy
: яclicks_1408736038.csv
строки в s3 какclicks_1408736038.csv
. Затем я запускаюCOPY
чтобы загрузить это в таблицуclicks
. Копирование документации здесь
Я провел несколько тестов (это было сделано для таблицы clicks
с уже 2 миллионами строк):
| multi-row insert stragegy | S3 Copy strategy |
|---------------------------+---------------------------+
| insert query | upload to s3 | COPY query |
-------------+---------------------------+--------------+------------+
1 record | 0.25s | 0.20s | 0.50s |
1k records | 0.30s | 0.20s | 0.50s |
10k records | 1.90s | 1.29s | 0.70s |
100k records | 9.10s | 7.70s | 1.50s |
Как вы можете видеть, с точки зрения производительности, похоже, я ничего не получаю, сначала скопировав данные в s3. Время upload
+ copy
равно времени insert
.
Вопросы:
Каковы преимущества и недостатки каждого подхода? Какова лучшая практика? Я что-то пропустил?
И дополнительный вопрос: возможно ли для красного смещения COPY
данные из s3 автоматически через манифест? Я имею в виду КОПИРОВАНИЕ данных, как только новые файлы .csv
добавляются в s3? Док здесь и здесь. Или я должен сам создать фонового работника для запуска команд COPY?
Мой быстрый анализ:
В документации о согласованности нет упоминания о загрузке данных через многорядные вставки. Похоже, что предпочтительным способом является COPY
с s3 с уникальными объектными ключами (каждый .csv
на s3 имеет свое уникальное имя)...
-
S3 Copy strategy
:- ПРОФИ: похоже на хорошую практику из документов.
- CONS: больше работы (мне нужно управлять ведрами и манифестами и cron, который запускает команды
COPY
...)
-
Multi-row insert strategy
- ПРОФИ: Меньше работы. Я могу вызвать запрос
insert
из моего кода приложения - Минусы: не похоже на стандартный способ импорта данных. Я что-то пропустил?
- ПРОФИ: Меньше работы. Я могу вызвать запрос