Чому я повинен використовувати базу даних на основі документа замість реляційної бази даних?


188

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


Можливо, база даних, орієнтована на документи, може в чомусь бути подібною до бази даних "сутність-атрибут-значення" (EAV).
ChrisW

Відповіді:


167

Напевно, не варто :-)

Друга найбільш очевидна відповідь - ви повинні використовувати її, якщо ваші дані не є реляційними. Зазвичай це виявляється в тому, що немає простого способу описати ваші дані як набір стовпців. Хороший приклад - база даних, де ви фактично зберігаєте паперові документи, наприклад, скануючи офісну пошту. Дані - це відсканований PDF, і у вас є деякі метадані, які завжди є (відскановані, відскановані, тип документа) та безліч можливих полів метаданих, які існують колись (номер клієнта, номер постачальника, номер замовлення, зберігайте у файлі до, Повний текст OCRed тощо). Зазвичай ви не знаєте заздалегідь, які поля метаданих ви додасте протягом наступних двох років. Такі речі, як CouchDB, працюють набагато приємніше для такого роду даних, ніж реляційні бази даних.

Мені також подобається, що мені не потрібні бібліотеки клієнтів для CouchDB, крім клієнта HTTP, який сьогодні включений майже в кожну мову програмування.

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

Для більш детального списку перевірте цю публікацію Річарда Джонса .


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

3
@ int3 Якщо ви не можете описати свої дані як набір стовпців, як ви повинні писати інтелектуальні запити на вказані дані?
Клей Сміт

46

CouchDB (з їх веб-сайту )

  • Сервер бази даних документів, доступний через API RESTful JSON. Як правило, до реляційних баз даних не просто отримують доступ через сервіси REST, але потребують набагато складнішого API SQL. Часто ці API (JDBC, ODBC тощо) досить складні. REST досить простий.

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

  • Поширений, із надійною, поступовою реплікацією з двонаправленим виявленням та керуванням конфліктами. Деякі комерційні продукти SQL пропонують це. Через API SQL та фіксованих схем це складно, складно і дорого. Для Couch це здається простим і недорогим.

  • Запит та вміст індексів, що містить механізм звітування, орієнтований на таблицю, який використовує Javascript як мову запитів. Як і SQL та реляційні бази даних. Тут нічого нового.

Так. Чому CouchDB?

  • REST простіший за JDBC або ODBC.
  • Жодна схема не простіша за схему.
  • Поширюється таким чином, що видається простим і недорогим.

12
Хоча я великий фанат баз даних NoSQL, перша заява (REST простіша за JDBC) є дуже сумнівною.
ᆼ ᆺ ᆼ

2
Протокол REST здається мені досить простим, оскільки це просто HTTP: стан без громадянства, мало методів тощо, і т. Д. Можливо, JDBC (під кришкою) простий; не здається, що це простіше, базуючись лише на державному стані.
С.Лотт

5
@ S.Lott Чи не повинна відповідь бути більш "загальною", а не орієнтуватися лише на CouchDb?
Pacerier

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

26

Для тупого зберігання та обслуговування даних інших серверів.

Останні кілька тижнів я грав із додатком, що реалізовує життя, який опитує мої канали (смачні, Flickr, Github, twitter ...) та зберігає їх у couchdb. Краса couchdb полягає в тому, що він дозволяє мені зберігати оригінальні дані в оригінальній структурі без накладних витрат. Я додав поле "class" до кожного документа, зберігаючи вихідний сервер, і написав клас візуалізації javascript для кожного джерела.

Узагальнюючи, щоразу, коли ваш сервер спілкується з іншим сервером, зберігання без схем є найкращим, оскільки у вас немає контролю над схемою. В якості бонусу couchdb використовує вбудовані протоколи серверів та клієнтів - JSON для представлення та HTTP REST для транспорту.


Чому б просто не зберігати їх у файлі чи файлі на канал?
j_random_hacker

6
оскільки couchdb також дозволяє створювати цікаві представлення за допомогою карти / зменшення. Наприклад, я можу створити подання на основі джерела даних або можу обчислити підсумки для кожного джерела.
даонб

4
Це чудовий момент ... якщо ви використовуєте дані і не маєте контролю над схемою вхідних даних - використовуйте сховище документів.
Джошуа Робінсон

1
Це перший дійсно переконливий аргумент, який я чув про значення баз даних NoSQL
Caleb McNevin

20

Приходить швидка розробка додатків.

Коли я постійно розвиваю свою схему, мені постійно страждає необхідність підтримувати схему в MySQL / SQLite. Хоча я ще не надто багато робив з CouchDB, мені подобається, як просто розвивати схему під час процесу RAD.

Випадок, коли ви, можливо, не хочете використовувати нереляційну базу даних, це коли у вас багато стосунків багато-багато; Мені ще належить розібратися в тому, як створити хороші функції MapReduce навколо таких відносин, особливо якщо вам потрібно мати метадані у відносинах. Я не впевнений, але я не думаю, що функції CouchDB Map можуть викликати власні запити в базі даних, оскільки це може призвести до нескінченних циклів.


1
Відмінний момент. Магазини даних (та інші схеми без схем) чудово підходять для швидкого розвитку на ранній стадії. Однак з тих же причин вони чудово підходять для складання прототипів на ранній стадії, вони важкі для надійних виробничих застосувань.
Теджай Кардон

6

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


1

Детальніше про smdelfin: гнучкість. Ви можете зберігати дані в будь-якій структурі (неструктурованої та всі), і кожен документ може бути абсолютно іншим. CouchDB спеціально корисний, оскільки за допомогою їх індексів "view" ви можете відфільтрувати конкретні документи та запитувати саме цей вид, коли вам потрібні ці підмножини вашої бази даних.

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


0

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

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

Ще однією перевагою є легкість використання баз даних на основі документів у веб-розробці. Для більш поглибленого порівняння моделей баз даних NoSQL перевірте це джерело: https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

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