Pull to refresh

СУБД — поворот на 90 градусов

Lumber room
Объемы данных и требования к скорости их обработки за последние десятилетия многократно выросли. Системы управления базами данных (СУБД) пытаются соответствовать новым реалиям и претерпевают значительные эволюционные и революционные изменения. Одним из таких эволюционных факторов является движение в сторону т.н. вертикальных (column-based) систем хранения.

Посмотрим в качестве примера на классическую таблицу EMPLOYEE:

Таблица Сотрудники/EMPLOYEE
ID NAME JOB_TITLE
1 Вася Грузчик
2 Ирина Секретарша
3 Петя Кассир
4 Антон Менеджер
В традиционных (row-based) СУБД эти данные будут размещаться построчно:
1 Вася Грузчик
2 Ирина Секретарша
3 Петя Кассир
4 Антон Менеджер
При этом чтобы выбрать, к примеру, имена всех сотрудников, придется сначала прочесть все строки, затем выбросить из них ненужное.

В вертикальных (column-based) СУБД те же самые данные будут представлены несколькими блоками:
Блок ID 1 2 3 4
Блок NAME Вася Ирина Петя Антон
Блок JOB_TITLE Грузчик Секретарша Кассир Менеджер

(представлено в сильно упрощенном виде)

Фактически это новое представление данных развернуто на 90 градусов относительно традиционного. Это дает ряд преимуществ:
  1. «Столбцовые» блоки данных меньше размером, а чем меньше размер данных, тем легче ими управлять.
  2. Блоки можно разносить на разные диски и даже сервера (вертикальное секционирование).
  3. Вертикальные («столбцовые») данные гораздо проще сжимать, что экономит место в памяти и разгружает дисковую систему.
В то же время можно заметить, что создание новой строки в БД повлечет за собой запись в три (!) физически разнесенных блока данных вместо одной записи в классическом «построчном» варианте. С точки зрения дисковой системы это не очень здорово. Поэтому «колоночное» хранилище считается более ориентированным на чтение и аналитические выборки (OLAP).

В 2009 году Майкл Стоунбрейкер (которого без преувеличения можно назвать Эйнштейном реляционных СУБД) предсказал скорый закат эры классических СУБД; чтобы не быть голословным, он заявил о разработке новой «вертикальной» СУБД Vertica.

Вендоры «традиционных» СУБД (такие Oracle и IBM), разумеется, не считают, что их эра закончилась. Поэтому в качестве современной парадигмы они предлагают «гибридные» системы хранения; фактически это надстройка над традионной системой хранения, где данные хранятся не целыми строками и не столбцами, а группами-блоками по несколько столбцов. Гибридная модель не так эффективна в сжатии данных, как «вертикальное» хранилище, однако является хорошим компромиссом.

Гибридные СУБД не всегда официально описываются как гибридные. Например, Oracle называет свою технологию Advanced Compression (11g), а «гибридные» блоки он называет compression unit. В нереляционной СУБД Cassandra, которую для своих нужд разработал Facebook, такие блоки называются column family.

Как и в случае объектных баз данных, вендоры явно действуют по проверенному принципу «мода скоро пройдет — а реляционные базы останутся навечно».

UPDATE


Небольшой FAQ. Зачем нужны вертикальные СУБД, если почти все современные СУБД поддерживают:
  1. Компрессию данных
  2. Кластерные индексы, materialized views, etc.
?

Давайте разберемся. Теоретически в обычной «горизонтальной» СУБД из индексов и materialized views мы можем смастерить хранилище, весьма эффективное по чтению (read-oriented). Допустим даже, что наша СУБД эффективно сжимает данные и даже индексы. В итоге мы сможем на выходе получить нечто вроде самодельного вертикального хранилища. Конечно, оно будет избыточным (а значит, запись данных усложняется...) и хранение данных не всегда будет оптимальным — но по сути будет соответствовать «вертикальному» или гибридному представлению.

Практически же вертикальная СУБД будет реализовывать все это более оптимально уже на уровне хранения данных. Ничего нового в используемых технологиях нет, как и пишет Стоунбрейкер про свой новый движок C-Store:
Lastly, materialized views, snapshot isolation,
transaction management, and high availability have also
been extensively studied. The contribution of C-Store is
an innovative combination of these techniques that
simultaneously provides improved performance, K-safety,
efficient retrieval, and high performance transactions.


Ссылки по теме:
  1. http://cacm.acm.org/blogs/blog-cacm/32212-the-end-of-a-dbms-era-might-be-upon-us/fulltext
  2. http://www.daniel-lemire.com/blog/archives/2009/09/16/relational-databases-are-they-obselete/
  3. http://www.dbms2.com/2009/09/03/oracle-11g-exadata-hybrid-columnar-compression/
  4. http://www.daniel-lemire.com/blog/archives/2009/09/04/changing-your-perspective-horizontal-vertical-and-hybrid-data-models/
  5. http://storagemojo.com/2009/09/14/rdbms-going-like-mainframes/
  6. http://wiki.apache.org/cassandra/DataModel

PS. На всякий случай уточним, что разделение между «вертикальными» и «горизонтальными» СУБД не имеет никакого отношения к популярной сейчас дихотомии SQL/NoSQL.
Tags:columnar storageverticac-storeolapСУБДвертикальные СУБД
Hubs: Lumber room
Total votes 18: ↑15 and ↓3 +12
Views2.3K

Popular right now

Разработчик DWH, BI
from 220,000 ₽МПЗ «Мясницкий ряд»ОдинцовоRemote job
Distributed Systems Engineer
from 8,000 $Cube.jsRemote job
Разработчик PL/SQL (Oracle)
from 140,000 ₽Ренессанс ЖизньRemote job
Программист Power BI Senior
from 80,000 to 125,000 ₽ТатнефтьКазаньRemote job
C Разработчик (Embedded)
from 120,000 ₽Flipper Devices Inc.МоскваRemote job