2016-09-08 5 views
1

Я недавно начал работу над bigqueries, я узнал, что база данных, ориентированная на столбцы, и поиск дисков в этих типах баз данных намного быстрее.Как ускорить поиск диска в базе данных, ориентированной на столбцы

Может ли кто-нибудь объяснить мне, как быстрее искать диск в базе данных, ориентированной на столбцы, по сравнению с реляционным db.

ответ

0

Ошибка «поиск диска намного быстрее». Реальный вопрос: «Как базы данных, ориентированные на столбцы, хранят данные на диске?», А ответ обычно «только для последовательной записи» (например, они обычно не обновляют данные на месте), и это приводит к меньшему количеству обращений к диску, следовательно, общий скорость.

0

Большая разница в том, как данные хранятся на диске.

Давайте посмотрим на (над) упрощенный пример:

Предположим, у нас есть таблица с 50 столбцами, некоторые номера (хранится двоичный) и другие имеют фиксированную ширину текста - с общим размером записи 1024 байт. Количество строк составляет около 10 миллионов, что дает общий размер около 10 ГБ - и мы работаем на ПК с 4 ГБ оперативной памяти. (в то время как эти таблицы обычно хранятся в отдельных блоках на диске, мы будем считать, что данные хранятся в одном большом блоке для простоты).

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

Наименьший объем данных, которые могут быть считаны с диска, является сектором и обычно составляет 4 КБ. Поэтому для каждого прочитанного сектора мы имеем только 4 значения. Это также означает, что для того, чтобы суммировать весь столбец, мы должны прочитать весь файл размером 10 ГБ.

В хранилище столбцов, с другой стороны, данные хранятся в отдельных столбцах. Это означает, что для нашего целочисленного столбца мы имеем 1024 значения в 4096 байтовом секторе вместо 4! (и иногда эти значения могут быть дополнительно сжаты). Теперь все данные, которые нам нужно прочитать, составляют около 40 МБ, а не 10 ГБ, и это также останется в кеше диска для будущего использования.

Это еще лучше, если мы посмотрим на кэш CPU (при условии, что данные уже кэшированы с диска): одно целое каждые 1024 байта далеки от оптимального для кеша CPU (L1), тогда как 1024 целых числа в одном блоке будут иметь скорость (те будут в кеше L1, что примерно в 50 раз быстрее обычного доступа к памяти).