Які відмінності між NoSQL і традиційними RDBMS?


71

Які відмінності між NoSQL і традиційними RDBMS?

Протягом останніх кількох місяців NoSQL часто згадувались у технічних новинах. Які його найбільш значущі риси щодо традиційного RDBMS? На якому рівні (фізичному, логічному) виникають відмінності?

Де найкращі місця для використання NoSQL? Чому?

Відповіді:


61

NoSQL означає "Не тільки SQL" і зазвичай означає, що база даних не є реляційною базою даних, яка була дуже популярною в останні десятиліття.

Причина, по якій NoSQL був настільки популярний останні кілька років, головним чином полягає в тому, що коли реляційна база даних виростає з одного сервера, це вже не так просто у використанні. Іншими словами, у розподіленій системі вони не дуже добре масштабуються. Усі великі сайти, про які ви згадали Google, Yahoo, Facebook та Amazon (я не знаю багато про Digg), мають безліч даних і зберігають дані в розподілених системах з кількох причин. Можливо, дані не вміщуються на одному сервері, або є вимоги щодо високої доступності .

Теорема CAP

Властивості розподіленої системи можна описати теоремою CAP . З трьох властивостей у вас може бути лише максимум два:

  • C onsistency
  • Доступність
  • толерантність до мережі P артикулювання

Amazon Dynamo використовує Eventual Consistency, щоб наблизитись до всіх трьох властивостей. Папір Динамо: Магазин високодоступних ключових значень Amazon варто прочитати, коли дізнаєтесь про бази даних NoSQL та розподілені системи. Amazon Dynamo має властивості A і P.

Google застосовує інший підхід до BigTable , який має властивості C і A.

Інші бази даних NoSQL

Як я писав на початку, існує багато інших типів баз даних NoSQL, розроблених для різних вимог. Наприклад, бази даних графіків , такі як Neo4j , бази даних документів, такі як CouchDB і багатомодельні / об'єктні бази даних, такі як OrientDB .

Нарешті, я хотів би сказати, що реляційні бази даних залишаться популярними. Вони дуже гнучкі та ремонтопридатні. Але вони не завжди є найкращим вибором.


1
Гарна, вичерпна відповідь.
TML

NoSQL НЕ означає нереляційні, це просто означає щось інше, ніж SQL СУБД.
nvogel

1
Схоже, що на нещодавній Конференції про страти O'Reilly Марк Мадсен у своїй історії баз даних створив нову інтерпретацію "NoSQL", щоб замінити "Не тільки SQL". Зараз: "Ні, SQL" ;-)
Лукас Едер

6
"Не тільки" було модернізацією, ранній рух NoSQL був жорстоко проти реляційних баз даних. Потім вони потрапили в реальний світ.
Гай

22

NoSQL - це дуже широкий термін, і зазвичай його називають "не тільки SQL". Цей термін втрачає прихильність у спільноті, яка не є RDBMS.

Ви побачите, що база даних NoSQL має кілька загальних характеристик. Їх можна приблизно розділити на кілька категорій:

  • магазини ключів / цінностей
  • Надихані бази даних Bigtable (засновані на папері Google Bigtable)
  • Динамо надихнуло бази даних
  • розподілені бази даних
  • бази даних документів

Це величезне питання, але на це досить добре відповіли в цьому опитуванні розподілених баз даних .

Коротка відповідь:

Бази даних NoSQL можуть відмовлятися від різних частин ACID для досягнення певних переваг - толерантності до розділів, продуктивності, розподілу навантаження або лінійного масштабування з додаванням нового обладнання.

Що стосується того, коли їх використовувати - це повністю залежить від потреб вашої програми.


12

NoSQL - це різновид бази даних, яка не має фіксованої схеми, як це робить традиційний RDBMS. За допомогою баз даних NoSQL схема визначається розробником під час виконання. Вони не записують звичайні заяви SQL проти бази даних, але замість цього використовують API, щоб отримати необхідні їм дані. Бази даних NoSQL зазвичай легко змінюють масштаб на різних фізичних серверах, не знаючи, на якому сервері перебувають шукані вами дані.

Однак для всієї цієї гнучкості є деякі вигоди: у баз даних NoSQL досить не вистачає функцій порівняно з такими системами RDBMS, як SQL Server, Oracle, DB2, MySQL і т.д.

NoSQL - це не те, що є новим. Насправді це було близько 50-60 років. Тоді його називали COBOL. Така ж точна ідея, просто інша група придумала її.


3
Точка 1 є невірною для багатьох (усіх?) Баз даних NoSQL, якщо ви прямо не сказали базі даних, що вам все одно, якщо запис вдасться. Наприклад, будь-яка база даних, підтримуваних Hadoop, записуватиме дані в три місця, де перебуває пекло або багато води. За замовчуванням Кассандра напише в три місця та визнає запис успішним, коли два досягли успіху.
Єремія Пешка

3
Як він поводиться з одночасністю під час цих оновлень? Чи є транзакція розподіленого типу, яка проходить між ними, або запис ACKed перед рукою, і сервери обробляють решту у фоновому режимі?
mrdenny

Паралельність повністю залежить від впровадження. Riak використовує векторні годинники для забезпечення одночасності, і в разі конфліктних записів вони можуть бути повернуті до викликаючої програми для вирішення. Інші використовують виграші в останньому записі.
Єремія Пешка

Що стосується підтвердження запису - у більшості випадків записи не підтверджуються, поки ОС не визнає запис. Ви навіть можете піти так далеко, щоб вимагати підтвердження міцних записів, що означає, що біти насправді перекидаються на диск, а не в буфер ОС. MongoDB визнає, що запис записується в пам'ять за замовчуванням, але може бути налаштований так, щоб вимагати підтвердження запису на диск. Реплікація обробляється по-різному з кожним продуктом. За допомогою Hadoop клієнт пише на сервер A, який пише на B, який пише на C. Як тільки C відповідає, запис закінчується, і клієнт отримує запис запису.
Єремія Пешка

У такому випадку я виправданий. Я видалив неправильне твердження. Я FUBAR щось ще?
mrdenny

6

В основному, розпорядження реляційними налаштуваннями, за допомогою первинних та зовнішніх ключів та додаткових накладних витрат, що беруть участь у підтримці безпеки транзакцій, часто дає надзвичайне підвищення продуктивності. Однак це не характерно для нових баз даних / сховищ даних, як, наприклад, MySQL був налаштований на виконання на "рівнях NoSQL" шляхом обходу шарів.

Коротше кажучи, ви часто можете отримати вражаючі показники, якщо ви все в порядку, ризикуючи втратити дані. Більшість систем NoSQL робить це. Наприклад, MongoDB етапує зміни даних, які потрібно записати, коли це зручно. Самі дані є безпечними та транзакційно безпечними, але зберігаються у нестабільному сховищі (пам'яті). Якщо ви втрачаєте силу, ви не можете бути на 100% впевнені, що ви не втратили дані або не маєте пошкоджених даних.

Це компроміс між безпекою та продуктивністю.


5

Гарне місце для початку - запис у Вікіпедії . По суті, замість того, щоб зв’язувати дані в одній таблиці до іншої, ви зберігаєте речі як пари ключових значень, і немає схеми бази даних, вона обробляється натомість у коді.

Кілька сайтів одночасно використовують і NoSQL, і типові сервери RDBMS, але для зберігання різних даних. Тож вам не доведеться вибирати те чи інше.


Той факт, що на основну частину цього питання можна відповісти, перейшовши на WP, змушує мене потерти підборіддя, коли я розглядаю відповіді тут. Я думаю, що це занадто "питання наповнення", але це дійсно все, що ми маємо зараз.
jcolebrand

1
Важлива примітка тут полягає в тому, що підтримка уникнення відносин (зовнішній ключ) в інфраструктурі бази даних / сервера позбавляє базу даних / серверів від навантаження та керування замком, підтримуючи підтримку референтної цілісності. Наслідком цього, компромісу, є те, що референтна цілісність, послідовність та інші проблеми з кислотними кислотами потім висуваються на програми. Багато додатків виграють від цього, а не обмежуються ним. (Деякі програми повинні бути вписані в модель клієнт / сервер).
Джим Денніс

0

Я активно працював над базою даних MongoDB NoSQL та Oracle.

Схема

База даних SQL має власну заздалегідь задану схему зберігання структурованих даних.

У базі даних NoSQL немає заздалегідь визначеної схеми, тут схема є найбільш динамічним елементом на основі елементів даних.

Масштабованість

Бази даних SQL є вертикально масштабованими, це означає, що якщо ми хочемо масштабувати базу даних SQL, нам потрібно надати апаратний приріст, на якому встановлена ​​система СУБД. Саме тут іноді йдеться про обмеження масштабованості.

Бази даних NoSQL є горизонтально масштабованими, це означає, що якщо ми хочемо масштабувати її, нам потрібно додати більше вузлів та створити мережу розподілу на основі власної потреби та необхідної потужності. Так вони зменшують навантаження на базу даних

Отримання даних

У базах даних на основі SQL для визначення та маніпулювання даними ми можемо використовувати SQL (Structured Query Language), який є дуже потужним на сьогоднішній день.

Що стосується бази даних NoSQL, запити зосереджуються на колекції та документах. Іноді його називають UnQL (неструктурована мова запитів). Це все ще знаходиться на етапі еволюції, тому воно залежить від постачальника до постачальника бази даних NoSQL.

Більше про ключові відмінності, мій блог: Різниця між базою даних SQL та NoSQL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.