Сценарії використання NoSQL або коли використовувати NoSQL [закрито]


252

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

  1. Чи варто використовувати NoSQL для даних користувачів? Наприклад, профілі, імена користувачів + паролі тощо.
  2. Чи варто використовувати NoSQL для важливого вмісту? Наприклад, статті, повідомлення в блогах, інвентаризація продуктів тощо.

Я припускаю, що ні? І я відчуваю, що NoSQL - це лише для швидко доступних речей, з яких нормально втрачати дані. Але я також читав, що додатки NoSQL мають вбудовану надмірність, щоб я не втрачав дані?

Крім того, якщо вищезгадані 2 приклади погані, чи можете ви надати мені конкретні випадки використання для бізнесу, де я використовував би NoSQL? Я бачу багато загальних описів, але не багато реальних прикладів. Єдине, про що я можу придумати, - це обмін повідомленнями користувачів та аналітика.

Дякую!

Відповіді:


183

Це справді своєрідне питання "це залежить". Деякі загальні моменти:

  • NoSQL, як правило, добре підходить для неструктурованих / "без схемних" даних - зазвичай вам не потрібно чітко визначати схему на передній панелі, а можна просто включати нові поля без будь-якої церемонії
  • NoSQL, як правило, надає перевагу денормалізованій схемі через відсутність підтримки JOIN у світі RDBMS. Таким чином, у вас зазвичай є сплющене, денормоване представлення ваших даних.
  • Використання NoSQL не означає, що ви можете втратити дані. У різних БД є різні стратегії. наприклад, MongoDB - ви можете фактично вибрати, на якому рівні відшкодувати продуктивність та потенціал втрати даних - найкраща продуктивність = більший обсяг для втрати даних.
  • Масштабувати рішення NoSQL часто дуже просто. Додавання більшої кількості вузлів для копіювання даних - це один із способів: а) запропонувати більшу масштабованість і б) запропонувати більше захисту від втрати даних, якщо один вузол опуститься вниз. Але знову ж таки, залежить від NoSQL DB / конфігурації. NoSQL не обов'язково означає "втрату даних", як ви робите висновок.
  • IMHO, складні / динамічні запити / звітності найкраще обслуговуються з RDBMS. Часто функціональність запитів для БД NoSQL обмежена.
  • Це не повинно бути 1 чи іншим вибором. Мій досвід використовував RDBMS спільно з NoSQL для певних випадків використання.
  • У баз даних NoSQL часто бракує можливості виконувати атомні операції в декількох "таблицях".

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

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


16
Заява про те, що NoSQL не підтримує приєднання, вводить в оману. Деякі бази даних NoSQL насправді набагато кращі при з'єднанні, ніж реляційні бази даних. Деякі їх взагалі не підтримують. Ця відповідь, мабуть, стосується більше MongoDB, а не NoSQL взагалі.
Алан Плюм

1
Чудовий підсумок. @AlanPlum, які конкретні бази даних NoSQL ви маєте на увазі?
Брайан

2
@brian Я є учасником ArangoDB ( arangodb.com ), який представляє собою суміш бази даних документів (думаю, MongoDB) та бази даних графіків (думаю, Neo4J) не лише з дешевими приєднаннями, але і з реальними транзакціями. Однак, бази даних NoSQL не є однорідною групою, і неможливо узагальнити з будь-якої однієї бази даних NoSQL всю "категорію".
Алан Плюм

Якщо ви обмірковуєте питання про використання RDB, оскільки "приєднання не підтримуються" в NoSQL, я настійно пропоную переглянути це відео з AWS re: Invent. Розбиває весь підхід NoSQL! Мені дуже допомагали. youtu.be/HaEPXoXVf2k
dillon.harless

9

Я думаю, що Nosql є "придатнішим" у цих сценаріях принаймні (більше додаткових вітається)

  1. Легко масштабувати горизонтально просто додаючи більше вузлів.

  2. Запит на великий набір даних

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

  3. Вузьке місце вводу / виводу диска

    Якщо веб-сайт повинен надсилати результати різним користувачам на основі інформації в реальному часі користувачів, ми, мабуть, говоримо про десятки або сотні тисяч запитів на читання / запис SQL в секунду. Тоді введення / виведення диска стане серйозним вузьким місцем.


20
Я не розумію, що може бути проблемою з RDBMS для №2. І NoSQL має менше дискових вводу / виводу відповідно до №3?
аві

5
Як говорить @avi, я думаю, що для №2 немає жодної проблеми, якщо ви запитуєте таблиці над індексом. Мільйони рядків? Гаразд, знайдіть лише ті індекси, які я хочу використовувати
Xtreme Biker

11
№2 і 3 є хибними. Протягом 2 років я робив тести на ефективність імпорту / експорту даних і бачив, як SQL Server 2014 розбиває Mongo на великих імпортах та експорту даних. Для 3-х сильно набраних даних у SQL зазвичай займає (я бачив понад 50% перед стисненням) значно менше місця, ніж бази даних документів.
Брайан

7
Так, і навіть для №1 я просто не розумію. Розширення є частиною договору кластерного весь основний РСУБД пропонує
Sebas

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