Немає такого поняття, як 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, з іншого боку, ще знаходяться в зародковому стані. Ми все ще з'ясовуємо найкращий спосіб їх використання.