Як растлумачыць сваёй бабулі розніцу паміж SQL і NoSQL

Як растлумачыць сваёй бабулі розніцу паміж SQL і NoSQL

Адно з найболей важных рашэнняў, якія прымае распрацоўнік, складаецца ў тым, якую базу дадзеных выкарыстаць. На працягу многіх гадоў опцыі былі абмежаваныя рознымі варыянтамі рэляцыйных баз дадзеных, якія падтрымлівалі мову структураваных запытаў (SQL). Да іх адносяцца MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 і многія іншыя.

За апошнія 15 гадоў на рынку з'явілася шмат новых баз даных у рамках падыходу No-SQL. Да іх ставяцца сховішчы ключоў-значэнняў, такія як Redis і Amazon DynamoDB, шырокія калоначныя базы, такія як Cassandra і HBase, сховішчы дакументаў, такія як MongoDB і Couchbase, а таксама графавыя базы дадзеных і пошукавыя сістэмы, такія як Elasticsearch і Solr.

У гэтым артыкуле мы паспрабуем разабрацца ў SQL і NoSQL, не залазячы ў іх функцыянал.
Акрамя таго, мы крыху павесялімся ў працэсе.

Тлумачым бабулі SQL

Бабуля, уяві, што я не адзіны твой унук. Замест гэтага маці і тата любілі адзін аднаго як трусы, у іх было 100 дзяцей, затым яны ўсынавілі яшчэ 50.

Такім чынам, ты кахаеш усіх нас і не жадаеш забыцца ніводнага з нашых імёнаў, дзён нараджэнняў, густаў каханага марозіва, памераў адзежы, хобі, імёнаў мужа і жонкі, імёнаў атожылкаў і іншых супер важных фактаў. Аднак давай паглядзім праўдзе ў вочы. Табе 85 гадоў, і старая добрая памяць проста не ў стане зладзіцца.

На шчасце, я, будучы самым разумным з тваіх унукаў, магу дапамагчы. Таму я прыходжу да цябе дадому, дастаю некалькі лістоў паперы і прашу цябе спячы печыва перад тым, як мы пачнем.

На адным аркушы паперы мы складаем спіс пад назвай «Унукі». Кожны унук запісаны з нейкай істотнай інфармацыяй аб ім, уключаючы ўнікальны нумар, які зараз будзе пазначаць, якім унукам ён з'яўляецца. Акрамя таго, дзеля арганізаванасці мы выпісваем найменныя атрыбуты ў верхняй частцы спісу, каб мы заўсёды ведалі, якую інфармацыю гэты спіс утрымоўвае.

id
імя
дзень нараджэння
last visit
памер адзення
favorite ice-cream
прынята

1
Джымі
09-22-1992
09-01-2019
L
Mint chocolate
ілжывы

2
Джэсіка
07-21-1992
02-22-2018
M
Камяністая дарога
праўда

…працягваем спіс!

Спіс унукаў

Праз некаторы час ты ва ўсім разбіраешся і мы амаль скончылі са спісам! Аднак ты паварочваешся да мяне і кажаш: "Мы забыліся дадаць месца для мужа і жонкі, хобі, унукаў!" Але не, мы не забыліся! Гэта ідзе далей і патрабуе новага ліста паперы.

Так што я выцягваю яшчэ адзін ліст паперы, і на ім мы завём спіс муж і жонка. Мы зноў дадаем атрыбуты, якія нам важныя, у пачатак спісу і пачынаем дадаваць у радках.

id
grandchild_id
імя
дзень нараджэння

1
2
Джон
06-01-1988

2
9
Фернанда
03-05-1985

…больш мужа і жонкі!

Спіс мужа і жонкі

На гэтым этапе я тлумачу бабулі, што калі яна жадае ведаць, хто з кім складаецца ў шлюбе, то ёй трэба толькі супаставіць id у спісе унукаў с grandchild_id у спісе мужа і жонкі.

Пасля пары дзясяткаў печываў мне трэба задрамаць. "Можаш працягнуць, бабуля?" Я пайду, каб задрамаць.

Я вяртаюся празь некалькі гадзін. А ты крутая, бабуля! Усё выглядае выдатна, за выключэннем спісу хобі. У спісе каля 1000 хобі. Большасць з іх паўтараюцца; што здарылася?

grandchild_id
хобі

1
роварах

4
роварах

3
роварах

7
бег

11
роварах

…працягваем!

Прабач, зусім забыўся сказаць! Выкарыстоўваючы адзін спіс, можна адсочваць толькі хобі. Затым у іншым спісе нам трэба адсачыць унукаў, якія займаюцца гэтым хобі. Мы збіраемся назваць гэта "Агульны спіс". Бачачы, што табе гэта не падабаецца, я пачынаю хвалявацца і вяртаюся ў рэжым спісу.

id
хобі

1
роварах

2
бег

3
плаванне

…больш хобі!

Спіс хобі

Як толькі ў нас ёсць наш спіс хобі, мы ствараем наш другі спіс і называем яго "Захапленні ўнукаў.

grandchild_id
hobby_id

4
1

3
1

7
2

…больш!

Агульны спіс унукі хобі

Пасля ўсёй гэтай працы ў бабулі зараз ёсць крутая сістэма запамінання для сачэння за ўсёй яе дзіўна вялікай сям'ёй. А потым - каб затрымаць мяне даўжэй - яна задае чароўнае пытанне: "Дзе ты навучыўся ўсё гэта рабіць?"

Рэляцыйныя базы дадзеных

Рэляцыйная база дадзеных - гэта набор фармальна апісаных табліц (у нашым прыкладзе гэта лісты), з якіх можна атрымаць доступ да дадзеных ці сабраць іх рознымі спосабамі без неабходнасці рэарганізацыі табліц базы дадзеных. Існуе шмат розных тыпаў рэляцыйных баз дадзеных, але нажаль спіс на лісце паперы не з'яўляецца адной з іх.

Адметная рыса найболей папулярных рэляцыйных баз дадзеных - мова запытаў SQL (Structured Query Language). Дзякуючы яму, калі бабуля перанясе сваю сістэму запамінання ў кампутар, яна зможа хутка атрымаць адказ на такія пытанні, як: "Хто не наведваў мяне ў мінулым годзе, жанаты і не мае ніякіх захапленняў?"

Адна з найболей папулярных сістэм кіравання базамі дадзеных SQL гэта MySQL з адчыненым зыходным кодам. Яна рэалізавана ў першую чаргу як сістэма кіравання рэляцыйнымі базамі даных (RDBMS) для праграмных прыкладанняў на базе вэб-тэхналогій.

Некаторыя ключавыя асаблівасці MySQL:

  • Яна даволі вядомая, шырока выкарыстоўваецца і старанна пратэставаная.
  • Ёсць шмат кваліфікаваных распрацоўшчыкаў, якія маюць досвед працы з SQL і рэляцыйнымі базамі дадзеных.
  • Дадзеныя захоўваюцца ў розных табліцах, што дазваляе лёгка ўсталёўваць сувязь з выкарыстаннем першасных і вонкавых ключоў (ідэнтыфікатараў).
  • Ён просты ў выкарыстанні і эфектыўны, што робіць яго ідэальным для вялікіх і малых прадпрыемстваў.
  • Зыходны код знаходзіцца на ўмовах GNU General Public License.

Цяпер забудзь УСЕ.

Тлумачым бабулі NoSQL

Бабуля, у нас вялізная сям'я. У ёй 150 унукаў! Многія з іх бралі шлюб, маюць дзяцей, чымсьці захапляюцца і іншае. У тваім узросце немагчыма памятаць усё пра ўсіх нас. Што табе трэба, дык гэта гэта сістэма запамінання!

На шчасце, я, ня жадаючы, каб ты забылася мой дзень нараджэння і каханы густ марожанага, магу дапамагчы. Таму я бягу ў найблізкую краму, бяру сшытак і вяртаюся да цябе дадому.

Першы крок, які я раблю, гэта пішу "Унукі" вялікімі тлустымі літарамі на вокладцы сшытка. Затым я гартаю на першую старонку і пачынаю пісаць усё, што ты павінна памятаць пра мяне. Праз некалькі хвілін старонка выглядае прыкладна так.

{ 
  "_id":"dkdigiye82gd87gd99dg87gd",
  "name":"Cody",
  "birthday":"09-12-2006",
  "last_visit":"09-02-2019",
  "clothing_size":"XL",
  "favorite_ice_cream":"Fudge caramel",
  "adopted":false,
  "hobbies":[ 
     "video games",
     "computers",
     "cooking"
  ],
  "spouse":null,
  "kids":[ 

  ],
  "favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
  "misc_notes":"Prefers ice-cream cake on birthday instead of chocolate cake!"
}

Я: “Здаецца ўсё гатова!”
бабуля: "Пачакай, а як жа астатнія ўнукі?"
Я: "Так, дакладна. Тады вылучаем па старонцы на кожнага.”
бабуля: “А мне трэба будзе запісваць усю тую ж самую інфармацыю для ўсіх, як я рабіла для цябе?”
Я: “Не, толькі калі ты хочаш. Давай пакажу.”
Забраўшы ў бабулі ручку, я гартаю старонку і хутка запісваю інфармацыю аб маім самым нялюбым стрыечным браце.

{ 
  "_id":"dh97dhs9b39397ss001",
  "name":"Tanner",
  "birthday":"09-12-2008",
  "clothing_size":"S",
  "friend_count":0,
  "favorite_picture":null,
  "remember":"Born on same day as Cody but not as important"
}

Кожны раз, калі бабулі трэба нешта ўспомніць аб адным з унукаў, ёй трэба толькі перайсці на патрэбную старонку ў запісной кніжцы ўнукаў. Уся інфармацыя пра іх будзе захоўвацца прама тамака, на іх старонцы, якую яна можа хутка змяніць і абнавіць.

Калі ўсё ўжо зроблена, яна задае чароўнае пытанне: "Дзе ты навучыўся ўсё гэта рабіць?"

Базы даных NoSQL

Існуе мноства баз дадзеных NoSQL ("не толькі SQL"). У нашых прыкладах мы паказалі базу дадзеных дакументаў. Базы дадзеных NoSQL мадэлююць дадзеныя спосабамі, выняткоўвалымі таблічныя адносіны, выкарыстоўваныя ў рэляцыйных базах дадзеных. Гэтыя базы дадзеных сталі папулярнымі ў пачатку 2000-х гадоў сярод кампаній, якім патрабавалася хмарная кластарызацыя баз дадзеных з-за іх відавочных патрабаванняў да маштабавання (напрыклад, Facebook). У такіх дадатках ўзгодненасць дадзеных была нашмат менш важнай, чым прадукцыйнасць і маштабаванасць.

У пачатку базы дадзеных NoSQL часта выкарыстоўваліся для нішавых задач кіравання дадзенымі. У асноўным, калі справа даходзіла да вэб і хмарных прыкладанняў, базы дадзеных NoSQL апрацоўвалі і размяркоўвалі значныя аб'ёмы дадзеных. Інжынерам, якія працуюць з NoSQL, таксама спадабалася гнуткая схема дадзеных (ці яе поўная адсутнасць), так што былі магчымыя хуткія змены ў абнаўляюцца прыкладаннях.

Ключавыя асаблівасці NoSQL:

  • Вельмі гнуткі спосаб захоўвання дадзеных
  • Гарызантальнае маштабаванне да кластараў
  • Магчымая паслядоўнасць на сталасць / распаўсюджванне
  • Дакументы, якія ідэнтыфікуюцца з выкарыстаннем унікальных ключоў

Дэталёвае параўнанне

MySQL патрабуе вызначанай і структураванай схемы.
NoSQL дазваляе захоўваць любыя дадзеныя ў "дакуменце".

MySQL падтрымлівае велізарную супольнасць.
У NoSQL ёсць невялікая і хутка якая расце супольнасць.

NoSQL адрозніваецца прастатой маштабавання.
MySQL мае патрэбу ў большай кіравальнасці.

MySQL выкарыстоўвае SQL, які прымяняецца ў мностве тыпаў баз дадзеных.
NoSQL - гэта база дадзеных на аснове дызайну з папулярнымі рэалізацыямі.

MySQL выкарыстоўвае стандартную мову запытаў (SQL).
NoSQL не выкарыстоўвае стандартную мову запытаў.

MySQL мае шмат выдатных інструментаў справаздачнасці.
У NoSQL ёсць некалькі інструментаў справаздачнасці, якія складана стандартаваць.

MySQL можа выдаць праблемы з прадукцыйнасцю для вялікіх даных.
NoSQL забяспечвае выдатную прадукцыйнасць на вялікіх дадзеных.

Думкі 8base

У кампаніі 8 базавы, у якой я працую, мы забяспечваем працоўную вобласць кожнага праекта рэляцыйнай базай дадзеных Aurora MySQL, якая размяшчаецца на AWS. Хоць NoSQL з'яўляецца лагічным выбарам, калі патрабаванні вашага прыкладання патрабуюць высокай прадукцыйнасці і маштабаванасці, мы лічым, што строгая ўзгодненасць дадзеных, якая забяспечваецца СКБД, неабходная пры стварэнні SaaS-прыкладанняў і іншага праграмнага забеспячэння для бізнэсу.

Для стартапаў і распрацоўшчыкаў, якія ствараюць такія бізнес-прыкладанні, якія маюць патрэбу ў справаздачнасці, цэласнасці транзакцый і дакладна вызначаных мадэлях дадзеных, укладвацца ў працу з рэляцыйнымі базамі дадзеных - гэта, на нашу думку, правільны выбар.

Даведайцеся больш аб распрацоўцы з Aurora, Serverless і GraphQL з дапамогай 8base.com тут.

Крыніца: habr.com

Дадаць каментар