Статья десятилетней давности, но при этом не потерявшая своей актуальности, рассказывает о Basic Compression в СУБД Oracle (требует Oracle Database Enterprise Edition 9.2. и старше). Изложенный материал, с некоторыми оговорками, справедлив и для OLTP Compression в СУБД Oracle (требует опцию Oracle Advanced Compression и Oracle Database Enterprise Edition 11.1 и старше).
Сжатие в базе данных идёт на уровне блоков, а не всей таблицы. Каждый сжатый блок, содержит локальный словарь ("symbol table"). Повторяющиеся данные сохраняются в словаре, а все их вхождения заменяются на короткую ссылку.
Сжатие в базе данных идёт на уровне блоков, а не всей таблицы. Каждый сжатый блок, содержит локальный словарь ("symbol table"). Повторяющиеся данные сохраняются в словаре, а все их вхождения заменяются на короткую ссылку.
Итак,
- Значение "Henry" встречается в таблице дважды. Соответственно, каждое вхождение "Henry" заменяется на ссылку на локальный словарь.
- Значение "Todd" тоже встречается дважды: один раз как имя, другой раз как фамилия. В этом случае, алгоритм сжатия поставит ссылки, и с имени, и с фамилии на одно и то же значение в локальном словаре (технология cross-column compression).
- Для четвертой и пятой строки алгоритм сжатия использует технологию multi-column compression: вместо того, чтобы сохранять значения "Tom", "Smith" и "1,99" как отдельные значения, он объединяет их в локальном словаре в одно "Tom|Smith|1,99", уменьшая,таким образом, количество ссылок.
- Столбцы, априорно содержащие уникальные значения, например, invoice_id, - не сжимаются.
- Частичное сжатие значений - не поддерживается. Таким образом, хотя обе части имени "Henry-Todd" из шестой строки уже содержатся в локальном словаре, выигрыша в сжатии не происходит.
Такая реализация ускоряет выполнение некоторых запросов и операций на сжатых данных. Например, для условия where можно использовать локальный словарь, а не просматривать все строки блока. Операции UPDATE также происходят быстрее, так как можно обновить только локальный словарь, оставив ссылки без изменений.
SQL> UPDATE TABLE item SET i_color = ‘red’ WHERE i_color =’blue’;
Соответственно, рекомендации для получения высоких коэффициентов сжатия:
- предварительная сортировка данных (чтобы в пределах одного блока оказались повторяющиеся значения)
- сжатие данных, которые уже не будут меняться со временем
- увеличение размера блока (параметр DB_BLOCK_SIZE)
- сжатие столбцов, содержащих повторяющиеся длинные строковые значения
Комментариев нет:
Отправить комментарий