Коли я використовую 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.