модели и системы управления базами данных NOSQL (теория)

Thank you for reading this post, don't forget to subscribe!

Базы дан­ных NoSQL пред­ла­га­ют неко­то­рые функ­ции, кото­рые отсут­ству­ют в тра­ди­ци­он­ных реля­ци­он­ных систе­мах управ­ле­ния база­ми дан­ных; напри­мер, они поз­во­ля­ют хра­нить про­стые пары ключ-зна­че­ние для кэши­ро­ва­ния в тече­ние корот­ко­го пери­о­да вре­ме­ни, сохра­нять неструк­ту­ри­ро­ван­ные кол­лек­ции дан­ных, с кото­ры­ми нель­зя рабо­тать с помо­щью язы­ка струк­ту­ри­ро­ван­ных запро­сов SQL, и т.п.

Системы управления базами данных

Базы дан­ных – это логи­че­ски орга­ни­зо­ван­ные хра­ни­ли­ща для раз­лич­ных видов дан­ных. Каж­дая БД име­ет свою модель, кото­рая опре­де­ля­ет струк­ту­ру дан­ных. Систе­мы управ­ле­ния база­ми дан­ных – это при­ло­же­ния (или биб­лио­те­ки), кото­рые управ­ля­ют раз­лич­ны­ми база­ми данных.

Системы управления базами данных NoSQL

В про­шлом деся­ти­ле­тии луч­шим сред­ством для хра­не­ния дан­ных счи­та­лись реля­ци­он­ные СУБД. Такие СУБД не очень гиб­кие, но поз­во­ля­ют созда­вать про­из­во­ди­тель­ные и слож­ные базы дан­ных. Рань­ше это­го было более чем доста­точ­но, одна­ко сего­дня у раз­ра­бот­чи­ков воз­ни­ка­ют дру­гие потребности.

Тер­мин NoSQL появил­ся более деся­ти лет назад как назва­ние для ещё одной реля­ци­он­ной БД. Одна­ко эта БД осно­ва­на на дру­гой идее: она отка­зы­ва­ет­ся от исполь­зо­ва­ния стан­дар­ти­зи­ро­ван­но­го SQL. В после­ду­ю­щие годы появ­ля­ют­ся и дру­гие подоб­ные базы дан­ных, и в резуль­та­те они объ­еди­ни­лись под назва­ни­ем «нере­ля­ци­он­ные базы дан­ных», или NoSQL.

По сво­ей кон­струк­ции базы дан­ных NoSQL не осно­ва­ны ни на одной моде­ли (в отли­чие от РСУБД, кото­рые осно­ва­ны на реля­ци­он­ной моде­ли). Каж­дая база дан­ных, в зави­си­мо­сти от целей и функ­ци­о­наль­но­сти, исполь­зу­ет свою модель.

Суще­ству­ет несколь­ко раз­лич­ных опе­ра­ци­он­ных моде­лей и систем для баз дан­ных NoSQL:

  • Хра­ни­ли­ще «ключ-зна­че­ние» (Redis, MemcacheDB и т.п.).
  • Хра­ни­ли­ще коло­нок (Cassandra, HBase).
  • Доку­мен­то-ори­ен­ти­ро­ван­ные СУБД (MongoDB, Couchbase).
  • Гра­фо­вые СУБД (OrientDB, Neo4J).

Рас­смот­рим эти моде­ли подробнее

Хранилище «ключ-значение»

Такие СУБД мож­но счи­тать самой базо­вой реа­ли­за­ци­ей NoSQL.

Они рабо­та­ют путём сопо­став­ле­ния клю­чей со зна­че­ни­я­ми (как в сло­ва­ре), меж­ду кото­ры­ми нет ни струк­ту­ры, ни отно­ше­ний. Под­клю­чив­шись к сер­ве­ру базы дан­ных, (напри­мер, Redis), при­ло­же­ние может опре­де­лить ключ (напри­мер, the_answer_to_life) и уста­но­вить его зна­че­ние (напри­мер, 42)ю поз­же эту пару мож­но извлечь посред­ством ключа.

СУБД типа «ключ-зна­че­ние» часто исполь­зу­ют­ся для быст­ро­го сохра­не­ния основ­ной инфор­ма­ции или вто­ро­сте­пен­ных дан­ных, полу­чен­ных путём слож­ных вычис­ле­ний. Они чрез­вы­чай­но про­из­во­ди­тель­ны и, как пра­ви­ло, лег­ко масштабируются.

Хранилища колонок

Эти хра­ни­ли­ща осно­ва­ны на под­хо­де «ключ-зна­че­ние», но рас­ши­ря­ют и услож­ня­ют его.

Такие СУБД созда­ют кол­лек­ции из пар «ключ-зна­че­ние». В отли­чие от тра­ди­ци­он­ных схем реля­ци­он­ных баз дан­ных, хра­ни­ли­ща коло­нок NoSQL не тре­бу­ют пред­ва­ри­тель­но струк­ту­ри­ро­ван­ных таб­лиц для рабо­ты с дан­ны­ми. Каж­дая запись состо­ит из одной или боль­ше коло­нок, в кото­рых хра­нит­ся инфор­ма­ция, и каж­дая колон­ка каж­дой запи­си может отли­чать­ся от остальных.

В целом, хра­ни­ли­ща семейств коло­нок NoSQL явля­ют­ся дву­мер­ны­ми мас­си­ва­ми, при­чем к каж­до­му клю­чу (т.е. стро­ке, запи­си) при­креп­ле­на одна или несколь­ко пар «ключ-зна­че­ние». Эти систе­мы управ­ле­ния поз­во­ля­ют хра­нить и исполь­зо­вать очень боль­шие объ­ё­мы неструк­ту­ри­ро­ван­ных данных.

Как пра­ви­ло, такие БД исполь­зу­ют­ся в слу­ча­ях, когда обыч­но­го хра­ни­ли­ща «ключ-зна­че­ние» недо­ста­точ­но и необ­хо­ди­мо хра­нить очень боль­шие объ­ё­мы дан­ных. Кро­ме того, хра­ни­ли­ща коло­нок лег­ко масштабировать.

Документо-ориентированные базы данных

Доку­мен­то-ори­ен­ти­ро­ван­ные базы дан­ных NoSQL поль­зу­ют­ся огром­ной попу­ляр­но­стью сре­ди поль­зо­ва­те­лей. Эти СУБД похо­жи на хра­ни­ли­ща коло­нок, одна­ко поз­во­ля­ют создать более слож­ную струк­ту­ру (доку­мент в доку­мен­те в документе…).

Доку­мен­ты устра­ня­ют неко­то­рые огра­ни­че­ния хра­ни­лищ коло­нок. В целом они поз­во­ля­ют создать доку­мент из про­из­воль­ной струк­ту­ры дан­ных любой сложности.

Несмот­ря на высо­кую про­из­во­ди­тель­ность и мно­же­ство пре­иму­ществ, доку­мен­то-ори­ен­ти­ро­ван­ные СУБД име­ют неко­то­рые недо­стат­ки и уяз­ви­мо­сти по срав­не­нию с дру­ги­ми СУБД NoSQL . Напри­мер, извле­кая зна­че­ние запи­си, вы полу­ча­е­те огром­ный объ­ём дан­ных, а обнов­ле­ние дан­ных нега­тив­но вли­я­ет на производительность.

Графовые СУБД

Гра­фо­вые базы дан­ных пред­став­ля­ют дан­ные совсем ина­че, чем преды­ду­щие три моде­ли. Они исполь­зу­ют дре­во­вид­ные струк­ту­ры – гра­фы, кото­рые состо­ят из узлов и рёбер.

Гра­фо­вые СУБД соеди­ня­ют и груп­пи­ру­ют полу­чен­ные дан­ные, бла­го­да­ря чему они намно­го быст­рее справ­ля­ют­ся с неко­то­ры­ми операциями.

Эти базы дан­ных обыч­но исполь­зу­ют­ся при­ло­же­ни­я­ми, кото­рым необ­хо­ди­мы чет­кие гра­ни­цы для под­клю­че­ний. К при­ме­ру, при реги­стра­ции в любой соци­аль­ной сети ваш акка­унт свя­зы­ва­ет­ся с акка­ун­та­ми ваших дру­зей, дру­зей ваших дру­зей и т.д. Такую опе­ра­цию про­ще все­го выпол­нить при помо­щи гра­фо­вой БД.

 

Базы данных NoSQL на основе модели «ключ-значение»

Самы­ми попу­ляр­ны­ми при­ло­же­ни­я­ми дан­ной кате­го­рии являются:

  • Redis (откры­тое сете­вое хра­ни­ли­ще данных).
  • Riak (откры­тая рас­пре­де­лён­ная систе­ма управ­ле­ния база­ми данных).
  • Memcached / MemcacheDB (рас­пре­де­лён­ная СУБД).

Слу­чаи использования:

  • Кэши­ро­ва­ние: быст­рое сохра­не­ние дан­ных для их даль­ней­ше­го использования.
  • Созда­ние оче­ре­дей: мно­гие хра­ни­ли­ща типа «ключ-зна­че­ние» (напри­мер, Redis) под­дер­жи­ва­ют спис­ки, набо­ры, оче­ре­ди и мно­гое другое.
  • Рас­пре­де­ле­ние задач и дан­ных: такие СУБД мож­но исполь­зо­вать для реа­ли­за­ции Pub/Sub.

Базы данных NoSQL на основе хранилищ колонок

Попу­ляр­ные приложения:

  • Cassandra: BigTable-подоб­ная база дан­ных, осно­ван­ная на DynamoDB.
  • HBase: BigTable-подоб­ное хра­ни­ли­ще дан­ных для Apache Hadoop.

Слу­чаи применения:

  • Хра­не­ние неструк­ту­ри­ро­ван­ной инфор­ма­ции: такие СУБД отлич­но под­хо­дят для дли­тель­но­го хра­не­ния боль­ших кол­лек­ций атри­бу­тов и значений.
  • Мас­шта­би­ро­ва­ние: СУБД на осно­ве хра­ни­лищ коло­нок лег­ко масштабировать.

Документо-ориентированные СУБД

Попу­ляр­ные приложения:

  • Couchbase: Memcached-сов­ме­сти­мая доку­мен­то-ори­ен­ти­ро­ван­ная база дан­ных на осно­ве JSON.
  • CouchDB: инно­ва­ци­он­ное доку­мен­то-ори­ен­ти­ро­ван­ное хра­ни­ли­ще данных.
  • MongoDB: широ­ко рас­про­стра­нён­ная и мно­го­функ­ци­о­наль­ная БД.

Слу­чаи использования:

  • Уплот­не­ние инфор­ма­ции: вы може­те созда­вать очень слож­ные струк­ту­ры данных.
  • Сов­ме­сти­мость с JavaScript и JSON: одна из наи­бо­лее важ­ных функ­ци­о­наль­ных воз­мож­но­стей таких СУБД.

Графовые СУБД

Попу­ляр­ные приложения:

  • Neo4J: высо­ко­про­из­во­ди­тель­ная база дан­ных на осно­ве графов.

Слу­чаи применения:

  • Обра­бот­ка слож­ных свя­зей меж­ду дан­ны­ми: гра­фо­вые БД очень про­дук­тив­ны в обра­бот­ке слож­ных и кос­вен­ных отно­ше­ний меж­ду данными.
  • Моде­ли­ро­ва­ние и обра­бот­ка клас­си­фи­ка­ций: гра­фо­вые БД отлич­но спра­вят­ся с любой ситу­а­ци­ей, в кото­рой важ­ны отно­ше­ния меж­ду дан­ны­ми, в том чис­ле с моде­ли­ро­ва­ни­ем дан­ных и клас­си­фи­ка­ци­ей раз­лич­ной информации.

Реляционные СУБД vs. NoSQL

Что­бы под­ве­сти ито­ги дан­ной ста­тьи, срав­ним реля­ци­он­ные и NoSQL СУБД.

  • NoSQL лег­ко справ­ля­ет­ся с гигант­ски­ми объ­ё­ма­ми данных.
  • Как пра­ви­ло, NoSQL быст­рее выпол­ня­ет опе­ра­ции запи­си (ско­рость опе­ра­ций чте­ния зави­сит от типа БД NoSQL и типа запра­ши­ва­е­мых данных).
  • NoSQL очень гиб­кая (по срав­не­нию с реля­ци­он­ны­ми СУБД, кото­рым изна­чаль­но необ­хо­ди­ма структура)
  • NoSQL пред­ла­га­ет авто­ма­ти­зи­ро­ван­ную репли­ка­цию и мас­шта­би­ро­ва­ние. Сего­дня NoSQL актив­но раз­ви­ва­ет­ся и устра­ня­ет общие про­бле­мы в рабо­те с дан­ны­ми, сре­ди кото­рых репли­ка­ция и мас­шта­би­ро­ва­ние – одни из самых важ­ных. NoSQL лег­ко мас­шта­би­ру­ет­ся и рабо­та­ет в кластере.
  • Кро­ме того, NoSQL пред­ла­га­ет широ­кий выбор при­ло­же­ний и моде­лей для рабо­ты с раз­лич­ны­ми типа­ми данных.