2016-09-10 2 views
1

В Redshift в качестве ключа сортировки можно указать только один столбец. Мне было интересно, почему в базе данных, ориентированной на столбцы, будет такое ограничение.Почему Amazon Redshift позволяет только один ключ сортировки за стол?

ex. Скажем, у меня есть таблица вроде этого:

rowid name  age 

1  Kevin  20 
2  Jill  35 
3  Billy Bob 19 

Внутри DB будет хранить каждый столбец отдельно, возможно, как это:

Kevin:1,Jill:2,Billy Bob:3 

20:1,35:2,19:3 

Я думаю, что можно было бы сортировать их по отдельности и с их собственный заказ и т. д.

+0

потому что чередующиеся ключи сортировки обрабатывают это по существу. или соединения в зависимости от ваших обстоятельств. «Таблица с чередующимися ключами упорядочивает ваши данные, поэтому каждый столбец сортировки имеет одинаковое значение». https://aws.amazon.com/blogs/aws/quickly-filter-data-in-amazon-redshift-using-interleaved-sorting/ – montewhizdoh

+0

, поэтому, если вы чередовываете ключ сортировки по многим столбцам: «Интервальная сортировка обеспечивает быструю фильтрацию, независимо от того, какие столбцы ключей сортировки вы указываете в своем предложении WHERE. » – montewhizdoh

ответ

1

Redshift предназначен для работы с большим количеством записей и для быстрого вычисления аналитики. Многие шаблоны проектирования небольших БД, которые настроены на транзакционные рабочие нагрузки, не будут работать в этом масштабе. Например, ключи сортировки в OLTP реализуются с индексом, который дублирует данные. В небольших масштабах данных (ГБ) это не большая проблема, но с большим объемом данных (ТБ и ПБ).

Основное использование ключей сортировки в Redshift заключается в том, чтобы позволить БД свести к минимуму количество считываемых IO-файлов, что очень медленно. Это еще один пример различия между БД малого масштаба и крупными. Если операция занимает 100 мс для записей 1M, для записей 1B или часа потребуется 36 секунд для записи 36B. Redshift позволяет запрашивать много миллиардов записей, управляя отображением минимального и максимального значений каждого столбца для каждого 1 МБ сжатого блока данных. Если данные этого блока отсортированы, большинство блоков можно игнорировать на основе ваших предложений WHERE.

Именно по этой причине вы хотели бы указать свои столбцы ключей сортировки (обратите внимание, что вы можете иметь несколько столбцов), чтобы они соответствовали столбцам, которые вы используете в своих предложениях WHERE (например, Date).

Как Compound, так и Interleaved могут поддерживать несколько столбцов, но с Compound вы определяете порядок сортировки и с чередованием чередуются друг с другом без какого-либо порядка между ними.

+0

Спасибо за понимание. Единственное, что мне было интересно, - это то, почему каждый столбец не может иметь свой собственный порядок сортировки. Поскольку строки не «склеены» вместе, как в OLTP-ориентированной БД, я бы подумал, что это выполнимо. Возможно, мне что-то не хватает ... – seand

+0

Redshift поддерживает сопоставление по столбцам для воссоздания записей. Все записи сортируются в одном порядке по всей таблице. Когда вы фильтруете один столбец («где дата между ...»), он фильтрует все столбцы и делает запросы намного быстрее. – Guy

+0

О, я думаю, потому что столбцы были в разных порядках, было бы труднее пересекать строки во время сканирования и применять фильтры? – seand

Смежные вопросы