Що таке NoSQL, як він працює і які переваги він надає? [зачинено]


168

Я чув про речі про NoSQL і про те, що вона може з часом стати заміною методів зберігання SQL БД через те, що взаємодія з БД часто є шийкою пляшки для швидкості в Інтернеті.

Тож у мене просто кілька питань:

  1. Що це саме?

  2. Як це працює?

  3. Чому це було б краще, ніж використання бази даних SQL? А наскільки це краще?

  4. Чи занадто нова технологія, щоб почати впроваджувати її, чи варто її переглянути?


тут багато хороших відповідей. Я також знайшов корисні відповіді на інші подібні запитання: (1.) 150+ оновлень без sql пояснюється метафорою автомобіля та безліччю посилань (2.) 70+ upvtes nosql пояснюється історією, що пояснює, як / чому створено nosql, і трохи про чому воно існує сьогодні
Тревор Бойд Сміт

Відповіді:


110
  1. Що це саме?

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

  2. Як це працює?

    Кожна з систем, позначених загальною назвою, працює по-різному, але основна ідея полягає в тому, щоб запропонувати кращу масштабованість та продуктивність, використовуючи моделі БД, які не підтримують усі функціональні можливості загальної RDBMS, але все ж достатньо функціональних можливостей, щоб бути корисними. Певним чином це схоже на MySQL, якому свого часу не вистачало підтримки транзакцій, але саме через це вдалося перевершити інші системи БД. Якщо ви могли написати свій додаток так, щоб не вимагали транзакцій, це було чудово.

  3. Чому це було б краще, ніж використання бази даних SQL? А наскільки це краще?

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

  4. Чи занадто нова технологія, щоб почати впроваджувати її, чи варто її переглянути?

    В основному залежить від того, що ви намагаєтесь досягти. Це, звичайно, досить зрілий для використання. Але мало хто з додатків дійсно потребує такого масштабного масштабу. Для більшості достатньо традиційного RDBMS. Однак, коли використання Інтернету стає все більш повсюдним, цілком ймовірно, що такі програми стануть більш поширеними (хоча ймовірно, не домінуючими).


2
що означає transaction?
Шон Мклін


Посилання "різноманітність нових
копій для

1
@csguy дякую, замінили на одного менш ймовірного зникнення
Майкла Боргвардта

135

Немає такого поняття, як NoSQL!

NoSQL - це казкове слово.

Протягом десятиліть, коли люди говорили про бази даних, вони мали на увазі реляційні бази даних. А коли люди говорили про реляційні бази даних, вони мали на увазі ті, якими ви керуєте за допомогою структуризованої мови запиту Едгара Ф. Кодда. Зберігання даних якимось іншим способом? Божевілля! Все інше - це просто плоскі файли.

Але в останні кілька років люди почали ставити під сумнів цю догму. Люди цікавились, чи справді таблиці з рядками та стовпцями є єдиним способом представлення даних. Люди почали думати і кодувати, і придумали багато нових понять, як можна організувати дані. І вони почали створювати нові системи баз даних, розроблені для цих нових способів роботи з даними.

Філософії всіх цих баз даних були різними. Але одне з цих спільних баз даних - це те, що структурована мова запитів більше не підходить для їх використання. Тому кожна база даних замінила SQL власними мовами запитів. І таким чином народився термін NoSQL, як мітка для всіх технологій баз даних, що протистоять класичній реляційній моделі бази даних.

То що спільного для баз даних NoSQL?

Власне, не багато.

Ви часто чуєте фрази на кшталт:

  • NoSQL масштабується!
  • NoSQL призначений для BigData!
  • NoSQL порушує кислоту!
  • NoSQL - це прославлений магазин ключів / цінностей!

Це правда? Добре, що деякі з цих тверджень можуть бути правдивими для деяких баз даних, які зазвичай називають NoSQL, але кожне з них є помилковим хоча б для одного іншого. Насправді єдине, що має спільні бази даних NoSQL, - це те, що вони не використовують SQL. Це воно. Єдине, що їх визначає, це те, що відрізняє їх один від одного.

Отже, що відрізняє бази даних NoSQL?

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

Документоорієнтована

Приклади: MongoDB, CouchDB

Сильні сторони: Гетерогенні дані, орієнтований на робочий об'єкт, спритний розвиток

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

Графічні бази даних

Приклади: Neo4j, GiraffeDB.

Сильні сторони: майнінг даних

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

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

Магазини ключових цінностей

Приклади: Redis, Cassandra, MemcacheDB

Сильні сторони: Швидкий пошук значень за відомими клавішами

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

На жаль, вони припускають, що ви точно знаєте, що шукаєте. Вам потрібен профіль користувача157641? Без проблем, це займе лише мікросекунди. Але що робити, коли ви хочете, щоб імена користувачів у віці від 16 до 24 років мали "вафлі" як улюблену їжу та входили в систему за останні 24 години? Жорстка удача. Якщо у вас немає чіткого та унікального ключа для конкретного результату, ви не можете його легко вийняти з магазину KV.

Чи застарілий SQL?

Деякі прихильники NoSQL стверджують, що їх улюблена база даних NoSQL - це новий спосіб робити справи, а SQL - це минуле.

Вони праві?

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

Бази даних NoSQL не є заміною для SQL - вони є альтернативою.

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

Крім того, існує набагато більше ноу-хау для SQL. Покоління комп'ютерних вчених витратили десятиліття своєї кар'єри на дослідження, орієнтуючись на реляційні бази даних, і це показує: Література, написана про бази даних SQL та реляційне моделювання даних, як практична, так і теоретична, може заповнити багато бібліотек, повних книг. Як створити реляційну базу даних для ваших даних - це тема, настільки добре вивчена, що важко знайти кутовий випадок, коли не існує загальноприйнятої найкращої практики з книги.

Більшість баз даних NoSQL, з іншого боку, ще знаходяться в зародковому стані. Ми все ще з'ясовуємо найкращий спосіб їх використання.


Я припускаю відповідь на питання Чи означає NoSQL нереляційну базу даних? ні, тому що бази даних Graph також є NoSQL, і вони є реляційними. Правильно?
tomasb

1
@tomasb Це залежить від того, як ви визначаєте "реляційну базу даних". У графічних базах даних відносини навіть важливіші, ніж у тих базах даних, які зазвичай називають реляційними.
Філіпп

"Немає проблем, це займе лише мікросекунди." - Чи не можу я отримати таку саму не транзакційну прочитання, наприклад, psql?
Накілон

2
Приємна відповідь, сформульована майже точно, як Адам Руйнує все, окрім це "Philipp Ruins noSQL" ;-)
JGlass

2
Це має бути найкращою відповіддю.

28

Оскільки хтось сказав, що моя попередня публікація була поза темою, я спробую компенсувати :-) NoSQL не був і ніколи не був призначений заміною для більш основних баз даних SQL, але пара слів для того, щоб отримати речі в потрібній перспективі.

В основі філософії NoSQL лежить думка, що, можливо, з комерційних причин та портативності, двигуни SQL, як правило, нехтують величезною потужністю операційної системи UNIX та її похідних.

За допомогою бази даних, що базується на файлових системах, ви можете негайно скористатися постійно зростаючими можливостями та потужністю базової операційної системи, які постійно зростають протягом багатьох років відповідно до закону Мура. При такому підході багато команд операційної системи автоматично стають також "операторами баз даних" (подумайте про "ls" "сортування", "знайти" та інші незліченні утиліти оболонки UNIX).

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

Я запускаю сотні веб-сайтів, і всі вони в більшій чи меншій мірі використовують NoSQL. Насправді вони не містять величезну кількість даних, але навіть якщо деякі з них були, я, певно, міг подумати про творче використання NoSQL та файлової системи для подолання будь-яких вузьких місць. Щось, що, ймовірно, буде складніше з традиційними "тюрмами SQL". Я закликаю вас до google для "unix", "manis" та "shaffer", щоб зрозуміти, що я маю на увазі.


9

Якщо я пам'ятаю правильно, це стосується типів баз даних, які не обов'язково відповідають реляційній формі. Приходять до уваги бази даних документів, бази даних без конкретної структури і які не використовують SQL в якості конкретної мови запитів.

Це, як правило, краще підходить для веб-додатків, які покладаються на продуктивність бази даних, і не потребують більш вдосконалених можливостей двигунів бази даних відносин. Наприклад, сховище значень Key-> Value, що забезпечує простий запит через інтерфейс id, може бути на 10-100x швидше, ніж відповідна реалізація SQL-сервера, з меншими витратами на обслуговування розробника.

Одним із прикладів є цей документ для магазину OLTP Tuple Store, який жертвував транзакціями для обробки однієї нитки (жодна проблема з одночасністю, оскільки не допускається паралельність), і зберігав усі дані в пам'яті; досягнення 10-100x кращих показників порівняно з аналогічною системою, керованою RDBMS . По суті, він відходить від подання "Один розмір, який підходить усім" для систем SQL та бази даних.


1
Ваше перше посилання, що стосується значення NoSQL (з написом "це"), здається, мертве, виправте його.
Jobin

7

На практиці NoSQL - це система баз даних, яка підтримує швидкий доступ до великих бінарних об'єктів (документів, jpgs тощо) з використанням ключової стратегії доступу. Це відхід від традиційного доступу до SQL, який достатньо лише для буквено-цифрових значень. Не тільки внутрішня стратегія зберігання та доступу, але й синтаксис та обмеження у форматі відображення обмежує традиційний SQL. Реалізація традиційних реляційних баз даних BLOB також зазнає цих обмежень.

За сценою - це опосередковане визнання відмови моделі SQL підтримати будь-яку форму OLTP або підтримку нових форматів даних. "Підтримка" означає не просто зберігання, а можливості повного доступу - програмні та за запитом, використовуючи стандартну модель.

Ентузіасти-релятори швидко змінили перемикання NoSQL від Not-SQL на Not-Only-SQL, щоб зберегти SQL на знімку! Це не добре, особливо коли ми бачимо, що більшість програм Java сьогодні вдаються до картування ORM основної реляційної моделі. Нова концепція повинна мати чітке визначення. Інакше це буде як SOA.

Основа систем NoSQL лежить у випадковій парі ключ - значення. Але це не нове. Традиційні системи баз даних, такі як IMS та IDMS, підтримували хешовані ключі ramdom (не використовуючи жодного індексу), і вони все ще є. Насправді IDMS вже має ключове слово NONSQL, де вони підтримують доступ SQL до своєї старої мережевої бази даних, яку вони називають NONSQL.


5

Це як джакузі: і бренд, і загальна назва. Це не просто конкретна технологія, а скоріше конкретний тип технології, в цьому випадку йдеться про масштабні (часто рідкісні) "бази даних", такі як Google BigTable або CouchDB.


5

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

Як каже Джоел, масово масштабовані бази даних, такі як BigTable або HBase , набагато цікавіші. GQL - мова запитів, пов’язана з BigTable та App Engine. Він значною мірою налаштований на SQL, щоб уникнути функцій, які Google вважає горловинами (наприклад, приєднується). Однак я раніше не чув про це, яке називалося "NoSQL".


5

NoSQL - це система бази даних, яка не використовує рядкові SQL-запити для отримання даних.

Натомість ви будуєте запити за допомогою API, який вони надаватимуть, наприклад, Amazon DynamoDB - хороший приклад бази даних NoSQL.

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


1

Чи означає NoSQL нереляційну базу даних?

Так, NoSQL відрізняється від RDBMS та OLAP. Він використовує більш слабкі моделі узгодженості, ніж традиційні реляційні бази даних.

Моделі узгодженості застосовуються в розподілених системах, таких як розподілена спільна пам'ять або розподілене сховище даних.

Як це працює внутрішньо?

Системи баз даних NoSQL часто оптимізовані для операцій з пошуку та додавання, і часто пропонують мало функціональних можливостей, крім зберігання записів (наприклад, зберігання ключових значень). Знижена гнучкість роботи в порівнянні з повноцінними системами SQL компенсується помітними посиленнями масштабуваності та продуктивності для певних моделей даних.

Він може працювати над структурованими та неструктурованими даними. Він використовує колекції замість таблиць

Як ви запитуєте таку "базу даних"?

Дивитися SQL проти NoSQL: Битва за бекенди ; це все пояснює.

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