Sql або nosql

SQL або NoSQL - ось в чому питання +8

  • 27.03.17 11:15 •
  • ru_vds •
  • # 324936 •
  • Хабрахабр •
  • Переклад •
  • 23 •
  • 17100

- такий же як Forbes, тільки краще.

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

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

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

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

Sql або nosql

Яку технологію вибрати? Відповідь на це питання залежить від особливостей проекту, про який йде мова.

Про вибір SQL-баз даних


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

  1. Необхідність відповідності бази даних вимогам ACID (Atomicity, Consistency, Isolation, Durability - атомарность, несуперечливість, ізольованість, довговічність). Це дозволяє зменшити ймовірність підозрілої поведінки системи і забезпечити цілісність бази даних. Досягається подібне шляхом жорсткого визначення того, як саме транзакції взаємодіють з базою даних. Це відрізняється від підходу, використовуваного в NoSQL-базах, які ставлять в основу гнучкість і швидкість, а не 100% цілісність даних.
  • Дані, з якими ви працюєте, структуровані, при цьому структура не схильна до частих зміною. Якщо ваша організація не перебуває в стадії експоненціального зростання, ймовірно, не знайдеться переконливих причин використовувати БД, яка дозволяє досить вільно поводитися з типами даних і націлена на обробку великих обсягів інформації.

  • Про вибір NoSQL-баз даних


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

    Ось можливості, які стали причиною популярності таких NoSQL баз даних, як MongoDB, CouchDB, Cassandra, HBase:

    1. Зберігання великих обсягів неструктурованої інформації. База даних NoSQL не накладаються обмежень на типи даних, що зберігаються. Більш того, при необхідності в процесі роботи можна додавати нові типи даних.
  • Використання хмарних обчислень і сховищ. Хмарні сховища - відмінне рішення, але вони вимагають, щоб дані можна було легко розподілити між кількома серверами для забезпечення масштабування. Використання, для тестування і розробки, локального устаткування, а потім перенесення системи в хмару, де вона і працює - це саме те, для чого створені NoSQL бази даних.
  • Швидка розробка. Якщо ви розробляєте систему, використовуючи agile-методи, застосування реляційної БД здатне уповільнити роботу. NoSQL бази даних не потребують того ж обсязі підготовчих дій, які зазвичай потрібні для реляційних баз.

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

    SQL і NoSQL


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

    Sql або nosql

    Два варіанти подання даних

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


    При реляционном підході дані треба зберігати в заздалегідь спроектованої структурі, з якої ці дані потім можна витягати. Наприклад, використовуючи оператор JOIN при вибірці з двох таблиць:


    Як більш просунутий приклад, для демонстрації того, коли SQL краще NoSQL, розглянемо особливості застосування в NoSQL-базах алгоритмів ущільнення. Проблема полягає в тому, що в деяких NoSQL-базах (наприклад, в CouchDB і HBase) постійно доводиться формувати так звані sstables - строкові таблиці в форматі ключ-значення, відсортовані по ключу. У такі таблиці, які зберігаються на диск, дані потрапляють з таблиць, що зберігаються в пам'яті, при їх переповненні і в інших ситуаціях. При інтенсивній роботі з базою створення таблиць, з часом, призводить до того, що підсистема вводу-виводу пристрою зберігання даних стає вузьким місцем для операцій читання даних. Як результат, читання в NoSQL-базі відбувається повільніше, ніж запис, що зводить нанівець одне з головних переваг нереляційних баз даних. Саме для того, щоб зменшити цей ефект, системи NoSQL використовують, в фоновому режимі, алгоритми ущільнення даних, намагаючись об'єднати безліч таблиць в одну. Але і сама по собі ця операція дуже ресурсномістких, система працює під підвищеним навантаженням.

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


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

    Тип сховища даних

    Питання поставлене невірно спочатку. Як і під підсумок:
    Ось ознаки проектів, для яких ідеально підійдуть SQL-бази:
    БД повинна вибиратися не під проект, а під завдання. Так чи інакше, в одному проекті можуть використовуватися як реляційні БД, так і так звані NoSQL.

    саме питання про NoSQL постало на порядку денному коли пам'ять стала доступна гігабайтами
    Ви щось плутаєте ...

    як же ви з даними працювати будете якщо не знаєте що там
    на вашу думку, робота з NoSQL базою на рівні додатку це відправка і отримання рядки?

    Інакше не можна пояснити «перевага» NoSQL - «відсутність жорсткої структури даних». Це як же ви з даними працювати будете якщо не знаєте що там?

    А навіщо сховища даних працювати з даними? Його справа їх отримувати, зберігати і віддавати. Для цього схема не потрібна особливо, хіба що для оптимізацій.