Вагомі причини НЕ використовувати реляційну базу даних?


139

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

Відповіді:


148

Прості текстові файли у файловій системі

  • Дуже просто створити та редагувати
  • Користувачі легко маніпулюють простими інструментами (наприклад, текстовими редакторами, grep тощо)
  • Ефективне зберігання двійкових документів

XML або JSON файли на диску

  • Як вище, але з трохи більшою здатністю перевірити структуру.

Файл електронних таблиць / CSV

  • Дуже проста модель для розуміння бізнес-користувачів

Subversion (або подібна система управління версією на диску)

  • Дуже хороша підтримка версій даних

Берклі БД (в основному, дисковий хештет на основі диска)

  • Дуже простий концептуально (просто невведений ключ / значення)
  • Досить швидко
  • Без адміністративних витрат
  • Я підтримую транзакції, я вважаю

Простий БД Amazon

  • Дуже схоже на Берклі DB, я вірю, але влаштовував

Магазин даних Google App Engine

  • Розміщений і високо масштабований
  • За зберігання ключа-значення документа (тобто гнучка модель даних)

CouchDB

  • Документ фокус
  • Просте зберігання напівструктурованих / на основі документа даних

Колекції рідної мови (зберігаються в пам'яті або серіалізуються на диску)

  • Дуже щільна інтеграція мови

Спеціальна (рукописна) система зберігання даних

  • Потенційно дуже висока продуктивність у необхідних випадках використання

Я не можу стверджувати, що знаю про них багато, але ви також можете хотіти заглянути в об'єктні бази даних .


10
Було б чудово, якби ви також пояснили недоліки кожного вибору, інакше як вибрати? Дякую,
Sklivvz

4
Також введення мільйонів рядків у БД може зайняти день, а додавання мільйона рядків журналу до файлу займає лише кілька хвилин. Я ніколи не зрозумію, чому люди наполягають на введенні даних журналів у базу даних.
Аарон Дігулла

33
Аарон: Я маю одну причину: ВИБІРУЙТЕ повідомлення з журналу WHERE (дата МІЖ 2009-01-01 І 2009-03-01) AND type = 'error' AND system = 'windows' :) Як би ви завантажили це з текстового файлу ?
Томаш Фейфар

1
Я рішуче підтримую текстові файли, коли це можливо. Ви не завжди можете їх використовувати, але коли це можливо, їм набагато простіше діагностувати проблеми.
Лорен Печтел

berkeley db, безумовно, має транзакції. текстові файли та файли xml / json не мають, тому багатопотокові програми можуть заглушити їх, якщо ви не будете обережні. Файли CSV прекрасні для набору параметрів, оскільки ділові користувачі можуть просто переглядати їх та редагувати їх без додаткових інструментів. Текстові файли чудово підходять для записів один раз / читання майже ніколи, таких як ведення журналів. Щоб вибрати підхід, потрібно з’ясувати, що ви намагаєтеся досягти
О. Джонс,

26

Відповідь Метта Шеппарда чудова (модифікація), але я б врахував ці фактори, коли думав про веретено:

  1. Структура: це, очевидно, розпадається на частини, або ви робите компроміси?
  2. Використання: як будуть аналізуватися / витягуватися / грукуватися дані?
  3. Тривалість життя: як довго дані корисні?
  4. Розмір: скільки даних?

Однією особливою перевагою файлів CSV перед RDBMSes є те, що вони можуть легко конденсуватися та переміщуватися практично до будь-якої іншої машини. Ми робимо великі передачі даних, і все досить просто, ми просто використовуємо один великий CSV-файл і простий у сценарії, використовуючи такі інструменти, як rsync. Щоб зменшити повторення великих файлів CSV, ви можете використовувати щось на зразок YAML . Я не впевнений, що я б зберігав щось на зразок JSON або XML, якщо б у вас не було значних вимог щодо відносин.

Що стосується не згаданих альтернатив, не варто знижувати Hadoop , що є реалізацією MapReduce з відкритим кодом. Це має спрацювати добре, якщо у вас є TON слабо структурованих даних, які потрібно проаналізувати, і ви хочете бути в сценарії, коли ви можете просто додати ще 10 машин для обробки даних.

Наприклад, я почав намагатися проаналізувати продуктивність, яка по суті була всім числом часових функцій різних функцій, зафіксованих на 20 машинах. Спробувавши вклеїти все в RDBMS, я зрозумів, що мені дійсно не потрібно запитувати дані ще раз, коли я їх агрегував. І це корисно лише мені в агрегованому форматі. Отже, я зберігаю файли журналів навколо, стискаються, а потім залишаю зведені дані в БД.

Зауважте, я більше звик думати з "великими" розмірами.


5
Одна небезпека уникнення файлів CSV повинна бути виконана правильно; його "легко здійснити читач або письменник CSV, який насправді не дотримується технічних характеристик, оскільки він виглядає настільки оманливо простим, і є кілька тонкощів: en.wikipedia.org/wiki/Comma-separated_values#Specification
Jared Updike

10

Файлова система зручна для зберігання двійкових даних, яка ніколи не працює надзвичайно добре у реляційних базах даних.



6

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


1
Чи можете ви навести приклад, чому / коли кислота не потрібна?
Іван Ворошилін

1
@vibneiro, якщо в базі даних є лише один користувач, який виконує лише послідовні операції, або ризик невідповідності баз даних у разі відключення живлення є прийнятним, або концепція транзакцій бази даних не застосовується, або немає необхідності в обмеженнях, каскади, тригери або подібне, тоді може бути достатньо постачальника, який не є кислотним без RDID (наприклад, текстовий файл з подібним до RDBMS API). Наприклад, ваша програма може зберігати базу даних історичних діагностичних повідомлень, для яких ACID абсолютно не має значення, і "log.txt" буде достатньо.
bzlm

Виявляється, кислота не потрібна в дуже рідкісних випадках. Цікаво, чому тоді бази даних NoSQL настільки популярні? Більшість з них не підтримують повну кислотність.
Іван Ворошилін

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

6

Спеціальний двигун зберігання даних (написаний від руки) / Потенційно дуже висока продуктивність у необхідних випадках використання

http://www.hdfgroup.org/

Якщо у вас є величезний набір даних, замість того, щоб розгорнути свій власний, ви можете використовувати HDF, ієрархічний формат даних.

http://en.wikipedia.org/wiki/Hierarchical_Data_Format :

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

Це також ієрархічно, як файлова система, але дані зберігаються в одному чарівному двійковому файлі.

HDF5 - це набір, який дозволяє керувати надзвичайно великими і складними наборами даних.

Подумайте, петабайт даних дистанційного зондування NASA / JPL.


4

День,

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

Один із таких прикладів - це база даних, яка використовується операторами мобільних телефонів для моніторингу та управління базовими станціями для мобільних телефонних мереж.

Я майже у всіх цих випадках використовує БД OO , або комерційний продукт, або самокатану систему, яка дозволяє ієрархії об'єктів.

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

Допит таких БД проводиться за допомогою фірмових методів, які, як правило, повністю вільні від SQL.

HTH.

ура,

Роб


4
Чому так, що дані базової станції не піддаються реляційній моделі?
kaybenleroll

3

Об'єктні бази даних не є реляційними базами даних. Вони можуть бути дуже зручними, якщо ви просто хочете вставити деякі бази в базу даних. Вони також підтримують версію та модифікацію класів для об'єктів, які вже існують у базі даних. db4o - це перше, що спадає на думку.


3

У деяких випадках (наприклад, дані фінансового ринку та управління процесами), можливо, вам доведеться використовувати базу даних у реальному часі, а не RDBMS. Дивіться посилання wiki


3

Кілька років тому був написаний інструмент RAD під назвою JADE, який має вбудовану систему OODBMS. Раніші втілення двигуна БД також підтримували Digitalk Smalltalk. Якщо ви хочете взяти зразок побудови додатків за допомогою парадигми, що не є RDBMS, це може бути початком.

Інші продукти OODBMS включають об’єктивність , GemStone (Вам потрібно отримати VisualWorks Smalltalk, щоб запустити версію Smalltalk, але також є версія Java). У цьому просторі також було декілька дослідницьких проектів з відкритим кодом - EXODUS та його нащадок SHORE.

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

OODBMS найбільш підходить для програм із основними структурами даних, які найкраще представлені у вигляді графіка взаємопов'язаних вузлів. Раніше я говорив, що найвірогідніший додаток OODBMS був багатокористувацькою підземеллям (MUD), де в приміщеннях містилися аватари гравців та інші об’єкти.


2
Раніше було правдою, що вам потрібен клієнт Smalltalk, щоб використовувати GemStone / S (для додатків для настільних ПК), але з веб-рамками Aida ( aidaweb.si ) та Seaside ( seaside.st ) GemStone / S можна використовувати безпосередньо як додаток сервер. Дивіться інформацію на GLASS ( seaside.gemstone.com )
Дейл Генріхс

Ще одна причина, якщо ви дбаєте про якість даних. У OODB, як Gemstone, набагато простіше застосувати складні правила дійсності.
Стефан Еггермон

Можливості спеціального запиту OODBMS набагато кращі, ніж можливості для RDBMS на базі SQL
Стефан Еггермонт

1

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

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

Такі сервіси, як Amazon S3, пропонують простіші моделі зберігання (ключ-> значення), які не підтримують SQL. Ключова здатність тут є масштабністю.

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


1

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

Ми багато використовуємо XML-файли - ви отримуєте добре структуровані дані, приємні інструменти для запиту тих же самих можливостей редагувати, якщо це доречно, те, що читається людьми, і вам не доведеться потім турбуватися про роботу двигуна db (або про роботу db двигун). Це добре працює для речей, які по суті є лише для читання (у нашому випадку частіше, ніж не генеруються з db в іншому місці), а також для одиночних користувальницьких систем, де ви можете просто завантажити дані та зберегти їх, як потрібно - але ви створюєте можливості для проблем, якщо потрібно багатокористувацьке редагування - принаймні одного файлу.

Для нас це стосується цього - ми або будемо використовувати щось, що буде робити SQL (MS пропонують набір інструментів, що працюють від .DLL, щоб виконати одиночні користувачі на всьому шляху до корпоративного сервера, і всі вони говорять один і той же SQL (з обмеженнями в нижньому кінці)) або ми збираємось використовувати XML як формат, оскільки (для нас) багатослівність рідко є проблемою.

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

Мерф


1

Можна подумати про використання сервера LDAP замість традиційної бази даних SQL, якщо дані програми сильно орієнтовані на ключ / значення та ієрархічний характер.


1

Файли BTree часто набагато швидше, ніж реляційні бази даних. SQLite містить у собі бібліотеку BTree, яка знаходиться у відкритому доступі (як і справді «публічний домен», не використовуючи термін «вільно»).

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


BTrees - це основна реалізація нормальних індексів. Oracle підтримує впорядковані з індексом таблиці, які є лише таблицею, реалізованою як індекс. Їх швидше читати, повільніше писати та використовувати B-дерево. Дивіться: < oracle.com/technology/products/oracle9i/datasheets/iots/… >
borjab

1

Повнотекстові бази даних, які можна запитувати за допомогою операторів наближення, таких як "в межах 10 слів" тощо.

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

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


1

Також: * Вбудовані сценарії - там, де зазвичай потрібно використовувати щось менше, ніж повноцінний RDBMS. Db4o - це ODB, який легко використовувати в такому випадку. * Швидка розробка чи підтвердження концепції - де ви хочете зосередитись на бізнесі, а не турбуватися про стійкість


1

Теорема CAP пояснює це лаконічно. В основному SQL забезпечує "Сильну послідовність: усі клієнти бачать однаковий вигляд навіть за наявності оновлень".


1

KISS: Нехай це буде малим та простим


1
Ось ввічлива версія ... Я частіше чула "Тримай просто, дурне" ... або, ковтаючи, може, саме так мені кажуть люди! :-(
GreenMatt

1

Я б запропонував RDBMS :) Якщо у вас немає проблем з налаштуванням / адмініструванням, перейдіть на SQLite. Вбудований в RDBMS з повною підтримкою SQL. Це навіть дозволяє зберігати будь-який тип даних у будь-якому стовпчику.

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

Про повний пошук тексту: SQLite також має модулі для повнотекстового пошуку.

Просто насолоджуйтесь приємним стандартним інтерфейсом до ваших даних :)


0

Однією з вагомих причин не використовувати реляційну базу даних буде, коли у вас є масивний набір даних і ви хочете масово паралельно та розподілено обробляти дані. Веб-індекс Google був би прекрасним прикладом такого випадку.

Hadoop також має реалізацію файлової системи Google під назвою Розподілена файлова система Hadoop .


0

Я настійно рекомендую Lua як альтернативу сховища даних типу SQLite.

Тому що:

  • Мова була розроблена як мова опису даних для початку
  • Синтаксис читається людиною (XML - ні )
  • Можна збільшити шматки Луа до двійкових, для додаткової продуктивності

Це варіант "колекції рідної мови" прийнятої відповіді. Якщо ви використовуєте C / C ++ як рівень програми, цілком доцільно запустити двигун Lua (100 кб двійкового) лише для того, щоб прочитати конфігурації / дані або записати їх.


Lua - мова програмування. Ця пропозиція може бути узагальнена, щоб запропонувати будь-які функції збереження / серіалізації будь-якої мови програмування (наприклад, соління / стелаж у Python або JSON / YAML для Perl et al тощо). Це взагалі не стосується паралельного доступу та гарантій ACID.
Джим Денніс

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