Я вже тиждень дізнаюся про бази даних NoSQL.
Я дійсно розумію переваги баз даних NoSQL та безліч випадків використання, для яких вони чудово підходять.
Але часто люди пишуть свої статті так, ніби NoSQL може замінити реляційні бази даних. І є сенс, що я не можу опустити голову:
Бази даних NoSQL - це (найчастіше) сховища ключових значень.
Звичайно, можна зберігати все у сховищі ключових значень (кодуючи дані в JSON, XML, будь-що інше), але проблема, яку я бачу, полягає в тому, що вам потрібно отримати деяку кількість даних, що відповідає певному критерію, у багатьох випадки використання. У базі даних NoSQL у вас є лише один критерій, за яким можна ефективно шукати - ключ. Реляційні бази даних оптимізовані для ефективного пошуку будь-якого значення в рядку даних.
Тож бази даних NoSQL насправді не є вибором для збереження даних, які потребують пошуку за їх вмістом. Або я щось неправильно зрозумів?
Приклад:
Потрібно зберігати дані користувачів для веб-магазину.
У реляційній базі даних ви зберігаєте кожного користувача у вигляді рядка в users
таблиці з ідентифікатором, іменем, його країною тощо.
У базі даних NoSQL ви зберігаєте кожного користувача зі своїм ідентифікатором як ключовим, а всі його дані (закодовані в JSON тощо) як значення.
Тож якщо вам потрібно завести всіх користувачів з певної країни (чомусь хлопці з маркетингу повинні щось про них знати), це легко зробити в реляційній базі даних, але не дуже ефективно в базі даних NoSQL, тому що ви повинні отримати кожного користувача, проаналізувати всі дані та відфільтрувати.
Я не кажу, що це неможливо , але він стає набагато складнішим, і я думаю, що це не так ефективно, якщо ви хочете шукати в даних записів NoSQL.
Ви можете створити ключ для кожної країни, який зберігає ключі кожного користувача, який проживає в цій країні, і отримати користувачів певної країни, отримавши всі ключі, які зберігаються в ключі для цієї країни. Але я думаю, що ця техніка робить складний набір даних ще складнішим - важче реалізувати та не настільки ефективно, як запит до бази даних SQL. Тому я думаю, що це не такий спосіб, який ви використовували б у виробництві. Або це?
Я не дуже впевнений, чи я неправильно зрозумів чи нехтував деякими концепціями чи найкращими методами роботи з такими випадками використання. Можливо, ви могли б виправити мої заяви і відповісти на мої запитання.