Хранилище данных, такое как Amazon Redshift, довольно плохо выполняет операции INSERT
и UPDATE
.
Причина в том, что всякий раз, когда строка изменяется (UPDATE
), текущая строка помечается как Удалено , и новая строка добавляется в конец области памяти.Это применимо, даже если изменено только одно значение в одном столбце.Это связано с тем, что данные сжимаются в блоках хранения, и вы не можете изменять сжатые данные, не перезаписывая весь блок.
Когда данные добавляются с помощью INSERT
, новые строки добавляются в конец области хранения.для каждого столбца.(Будучи столбчатой базой данных, каждый столбец хранится отдельно.) Это означает, что несортированная область увеличивается при добавлении данных, что снижает эффективность поиска данных с помощью таблицы.Эту проблему можно исправить, запустив VACUUM
, в результате которого строки будут пересортированы.
Amazon Redshift не подходит для использования в качестве стандартной базы данных OLTP.Скорее, он лучше всего подходит для загрузки большого количества информации из существующих источников данных и выполнения сложных запросов по миллионам и миллиардам строк.
Возможно, было бы лучше выполнить такие обновления в обычной базе данных, а затем извлечь данные вRedshift для отчетов («только для чтения»).
Что касается DISTKEY / SORTKEY, общее правило таково:
- Установите
DISTKEY
для столбца, наиболее часто используемого вJOIN
, потому что он совмещает данные из обеих таблиц в одном и том же срезе - Установите
SORTKEY
на столбец, наиболее часто используемый в операторе WHERE
, поскольку он позволяет Redshift «пропустить»дисковые блоки, которые не содержат соответствующие строки.