Коли я використовую XML замість SQL? [зачинено]


102

Я вже декілька років працюю над веб-додатками, керованими базами даних, і нещодавно взяв участь у проекті, що передбачав підтримку CMS, здатного на XML. Це змусило мене задуматися про використання XML / XSLT в цілому і в яких ситуаціях це було б корисніше, ніж підхід, який я завжди використовував, який зберігає всі мої дані в (My) SQL базі даних, а потім використовує PHP / Python / тощо. працювати з нею в Інтернеті за потребою.

Очевидно, тут я щось не "отримую". Чи могла б хтось надати приклади програм, де було б краще зберігати дані у XML-файлах, а не в базі даних?


4
Я думаю, що питання точніше XML проти RDBMS, а не проти SQL.
JAL


4
Я думаю, що питання точніше FILE проти RDBMS, а не XML проти SQL.
pfeds

Якщо у вас є час, нещодавній переможець премії Тьюрінга Майкл Стоунбрейкер "Що відбувається навколо" є чудовим документом з цієї історії баз даних, включаючи те, як бази даних XML повторювали минулі помилки.
Джефрі Босбум

Відповіді:


100

Цитувати цю книгу (Ефективний XML: 50 конкретних способів поліпшити ваш XML):

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

Я думаю, це підсумовує це, якщо трохи прямо. XML - це формат обміну даними. Можна мати бібліотеки для аналізу XML, які можуть запитувати DOM з виразами XPath, але це не те саме, що і СУБД. Ви можете створити СУБД з інтерфейсом DOM / XPath, але для отримання властивостей ACID або масштабування до великих наборів даних вам потрібно реалізувати двигун СУБД та формат даних з індексами, журналом та іншими артефактами СУБД - що (за визначенням) робить це щось інше, ніж XML.


1
Я розумію, що ця відповідь була написана в 2008 році, але з появою ряду файлових систем баз даних мені стає цікаво, чи мають вони сенс більше, ніж звичайні RDBMS у ряді ситуацій. SQL розроблявся в темні століття, коли місце на диску було дорогим, і це стало способом думки в рамках програмної галузі. Це не означає, що це правильно з точки зору сучасних методів.
pfeds

Це все ще не робить XML базою даних, а лише форматом серіалізації для того, що ви зберігаєте в BLOB. Це може бути корисним для вас, але це не робить XML заміною повнофункціонального засобу запитів.
ЗанепокоєнийOfTunbridgeWells

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

Якщо я напишу SQL SP для отримання даних і використання HTML для відображення замість файлу XSLT, це швидше чи приблизно те саме?
SearchForKnowledge

1
сьогодні ви можете використовувати XQuery для баз даних XML.
Дон Діланга

23

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

Наступне посилання є непоганим для опису при використанні XML: Чому я повинен використовувати XML?


Оновлення Посилання від 2012-09-06: xml.silmaril.ie/index.html
WIP

15

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

SQL хороший для зберігання та пошуку. XML хороший для передачі та форматування.


10

1) Коли вам доведеться обмінюватися своїми даними з іншими. XML - це " lingua franca " в Інтернеті - майже кожен може прочитати та інтерпретувати її, на відміну від файлу бази даних.

2) Коли обсяг ваших даних невеликий і вам не потрібно робити складні запити проти нього. XML-файли корисні для таких речей, як зберігання конфігурації чи шаблонів документів.

3) Якщо у вас не так багато авторів, які намагаються отримати доступ до одних і тих же даних. Бази даних SQL включають механізми одночасності, які працюють для вас за кадром. Бази даних SQL можуть швидко підтримувати індекси для отримання інформації на великих наборах даних ...


5

Я використовую XML для:

  • Збереження ієрархії об'єктів.
  • Переміщення даних з одного процесу або машини в інший.
  • Дані, які змінюються рідко, якщо взагалі є; налаштування конфігурації тощо.
  • Оскільки вхід до XSLT перетворюється: загалом кажучи, якщо одна з моїх програм висилає HTML, для цього використовується XSLT, і таким чином вихідні дані в деяких будуть представлені як XML
  • Розмітка тексту (Не забуваймо про це!)

Між тими випадками використання та випадками використання для бази даних не так багато. Деякі, але не дуже.

За іронією долі, де я зараз найсильніше використовую XML - це настільний додаток, який створює ADO DataSet в пам'яті та використовує методи WriteXml та ReadXml DataSet для збереження та отримання його. Я використовую ADO, тому що набагато простіше динамічно будувати модель даних, визначену метейнформацією, використовуючи ADO, ніж було б реалізувати власну модель об'єкта для завдання.

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


3

Я вважаю, що існує досить багато комерційних додатків, які широко використовують XML як носій інформації. Я зробив це для програми планування проектів, де користувач зберігає кожен проект у власному файлі. Додаток живе на USB-накопичувачі і вимагає встановлення нуля. Всі дані витягуються з XML і працюють над пам’яттю, тому getRecord (id) швидко затягується.

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



1

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

Також, як згадувався попередній плакат, формат обміну.


1

Як XML, так і RDMS можна використовувати як сховища даних, але кожна реалізація має свої переваги та недоліки.

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

RDMS (бази даних), як правило, більш масштабовані, пропонують більшу підтримку одночасності і набагато швидші при роботі з великими обсягами даних. Реляційна модель полегшує подачу даних згодом. Бази даних страждають від невідповідності об'єктно-реляційного опору ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ), яка може вимагати від вас написання некрасивого коду або використання складних ORM.


1

Я б пішов, якби у мене на хості були обмежені бази даних mysql, я побачив би можливість використання XML як сховища даних.


1

Ось приклад використання XML з SQL: Аутентифіковані користувачі читають і записують дані в різні бази даних, не всі з яких є одними і тими ж СУБД. Користувачі для компанії A використовують дані з локальної бази даних SQL Server. Користувачі компанії B використовують дані з віддаленої бази даних Oracle. І так далі. Десяток різних баз даних, кожна зі трохи різними схемами для одних і тих же основних даних.

Розробник веб-сайту не має можливості створювати збережені процедури на віддалених базах даних. SQL повинен бути надісланий безпосередньо з веб-програми до бази даних. Оскільки кожна база даних має дещо різний синтаксис і схему SQL, для кожної з 12 баз даних для однієї операції необхідно використовувати різні SQL (SELECT, INSERT тощо).

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

Як і у випадку збережених процедур, SQL у файлі XML можна оновлювати, не зупиняючи або перекомпілюючи додаток.


0

Деякі програми використовують XML-файли для зберігання конфігурації, я вважаю за краще використовувати SQLite .


0

Я ніколи не використовував би будь-який тип XML для зберігання своїх даних.

Ми використовуємо перетворення XSLT як шар абстрагування даних у нашому додатку SOA. Всі об'єкти передають один одному дані в XSLT, тому існує лише одна мова, яку вони повинні розуміти. За винятком роз'єму бази даних, який повинен мати можливість перетворювати дані в SQL, для надсилання їх у БД.

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


"Всі об'єкти передають один одному дані в XSLT", серйозно?
Горан

Усі, хто спілкується через службову шину.
Треб

XSLT - це мова для перетворення XML, щоб не переносити інформацію. Я думаю, ви могли б використовувати XSLT для надсилання даних, оскільки це підмножина XML, але чому б ви цього хотіли?
Горан

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