Сжатие данных в СУБД выходит на первый план
Автор: Curt Monash
Дата публикации оригинала: 2008-08-08
Перевод: Олег Кузьменко
Источник: Блог Курта Монаша
Я уже много писал о сжатии данных в СУБД, ориентированных на хранилища данных; поставщики предподносят компрессию как одно из основных достоинств их продуктов, которое приносит непосредственную выгоду клиентам. Наиболее примечательной, вероятно, является короткая статья, которую Майк Стоунбрейкер (Mike Stonebraker) написал для этого блога, о тех преимуществах в области компрессии, которыми обладают СУБД с хранением данных по столбцам перед теми, в которых данные хранятся построчно, еще до того, как он и его коллеги открыли свой блог. Компрессия уже давно играет одну из главных ролей в истории DATAllegro, в то время, как Netezza занялась этим вопросом совсем недавно. Одной из причин, почему Teradata поставлена в невыгодное положение в плане ценовой политики, может служить как раз слабая компрессия. И так далее.
Поставщики универсальных СУБД тоже энергично работают над сжатием данных. Microsoft SQL Server 2008 использует компрессию несколькими способами (хранение данных, репликация и перенос журнала транзакций, создание резервной копии). И Oracle тоже предлагает сжатие данных, смотрите пространную статью Дона Берлесона (Don Burleson).
Если бы мне пришлось подвести итог тому, что мы знаем и не знаем о сжатии в базах данных, я думаю, что я бы начал со следующего:
- В СУБД с хранением данных по столбцам действительно сжатие выполняется существенно лучше, чем в СУБД, в которых данные хранятся построчно. Вероятно, это происходит по следующим причинам:
- Большая часть столбца помещается в один блок, поэтому алгоритмы сжатия работают лучше.
- Используется большее количество схем сжатия (например, дельта-компрессия, сжатие с использованием словаря и токенов, которое также применяется в системах с хранением по строкам).
- Создается ощущение, что у CУБД, ориентированных на хранилища данных, дела с компрессией обстоят лучше, чем у универсальных СУБД. По-видимому, это происходит благодаря сочетанию двух причин:
- Их создатели больше стараются.
- Они используют блоки большего размера.
- Несмотря на все эти вполне резонные обобщения, разные СУБД, вполне сравнимые между собой по другим параметрам, добились очень разной степени успеха в реализации компрессии.
Сжатие является одной из самых важных характеристик, которой может обладать система управления базами данных, поскольку благодаря сжатию удается сэкономить на емкости системы хранения и иногда добиться неплохого повышения производительности. Поэтому компрессия должна быть одним из ключевых факторов, рассматриваемых при принятии решения о покупке любой СУБД.
Ссылки на статьи Курта по следующим категориям (на английском языке):
Columnar database management, Data warehousing, Database compression
Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.
October 8th, 2008 at 8:22 pm
Уже слышал несколько отзывов о том, как сделано сжатие в Microsoft SQL Server 2008. В основном слышал от тех, кто ее использует для 1С (различной конфигурации). Сама база занимает места от 5 до 10 раз меньше и на скорость никак не сказывается.
Интересно, кто-то делал по этому поводу реальные замеры?
February 13th, 2009 at 1:43 am
Я пробовал, сжатие задается для таблицы на уровне строк/страниц/таблицы. В зависимости от уровня компресии на внешних данных (6-7ГБ) таблицы трафика получалось сжатие в 2-3 раза.