Використання XML як зберігання даних [закрито]


12

Я думав про формат XML та наступну цитату:

"XML - це не база даних. Це ніколи не мало бути базою даних. Це ніколи не буде базою даних. Реляційні бази даних - це перевірена технологія з досвідом впровадження понад 20 років. Це тверді, стабільні, корисні продукти. Вони не йдуть. XML - це дуже корисна технологія для переміщення даних між різними базами даних або між базами даних та іншими програмами. Однак це сама по собі не база даних. Не використовуйте його , як один «. - Ефективний XML: 50 конкретних способів поліпшити свій XML з допомогою Елліотт Рости Гарольд (стр 230, частина 4, пункт 41, другий абзац)

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

Особисто я не згоден, і app.configфайл .NET, який використовується для зберігання налаштувань програми, є прикладом зберігання даних у XML-файлі. Однак для баз даних, а не для конфігурацій тощо XML не слід використовувати.

Я буду використовувати два приклади:
А) Дані про клієнтів із полями, які знаходяться на одному рівні, тобто є ряд полів, які стосуються одного клієнта без дітей.
В) Дані про конфігурацію програми, де вкладені поля а властивості мають багато сенсу

Отже, моє запитання: чи це все-таки дійсне твердження і чи прийнятно зберігати дані за допомогою XML?

EDIT: Я надіслав електронний лист автору цієї цитати, щоб запитати його вклад / додатковий контекст.


11
База даних не полягає в зберіганні даних, а в отриманні даних за заданими критеріями. XML просто не масштабує - спробуйте маніпулювати XML-файлом розміром 100 ГБ із описаними вами даними.

1
Питання незрозуміле. Ви питаєте про збереження даних у файлі XML замість БД або зберігання даних всередині БД, але як тип XML. Подальше затуманення - приклад файлу .net config, оскільки я не бачу його як зберігання даних.
softveda

Ще ніхто не згадував, що жоден формат зберігання даних сам по собі не є базою даних. База даних включає формат зберігання та механізм пошуку. XML не є механізмом пошуку, тому він не може бути базою даних. XML також є жахливим форматом зберігання для більш ніж 1 МБ даних.
GlenPeterson

Відповіді:


12

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

Коли люди говорять про бази даних, вони зазвичай мають на увазі системи зберігання даних, які зберігають величезну кількість даних, часто в діапазоні гігабайт або терабайт. База даних потенційно набагато більша, ніж кількість доступної оперативної пам’яті на сервері, який її зберігає. Оскільки нікому ніколи не потрібні всі дані в базі даних одразу, бази даних повинні бути оптимізовані для швидкого пошуку селективних підмножин їх даних: саме для цього потрібне SELECTтвердження, а реляційні бази даних, а також рішення NoSQL оптимізують свій внутрішній формат зберігання для швидкого пошуку пошук таких підмножин.

Однак XML не відповідає цим вимогам. Зважаючи на вкладену структуру тегів, неможливо визначити, де у файлі зберігається певне значення (з точки зору зміщення байтів у файл) без проходження всього дерева документів, принаймні до відповідності. Реляційна база даних має індекси, і пошук значення в індексі навіть з примітивною реалізацією бінарного пошуку - це єдиний пошук O (log n), а потім дійти до фактичних значень - це не що інше, як пошук файлу (наприклад, fseek(data_file_handle, row_index * row_size)), що є O (1). У XML-файлі найефективніший спосіб - запустити аналізатор SAX над вашим документом, виконуючи дуже багато читань і пошуків, перш ніж дійти до фактичних даних; Ви навряд чи зможете отримати це краще, ніж O (n), якщо ви не використовуєте індекси, але тоді вам доведеться перебудувати весь індекс для кожної вставки (див. нижче).

Вставлення ще гірше. Реляційні бази даних не гарантують порядок рядків, а це означає, що вони можуть просто додавати нові рядки або замінювати будь-які рядки, позначені як "видалені". Це надзвичайно швидко: БД може просто зберігати пул записуваних місць навколо; отримання запису з пулу - O (1), якщо басейн не порожній; в гіршому випадку пул пустий, і повинна бути створена нова сторінка, але це теж O (1). На противагу цьому, база даних на основі XML повинна буде перемістити все після точки вставки, щоб звільнити місце; це О (п). Коли індекси починають грати, речі стають ще цікавішими: типові індекси реляційних баз даних можуть бути оновлені з відносно низькою складністю, скажімо, O (log n); але якщо ви хочете проіндексувати свої XML-файли, кожна вставка потенційно змінює розташування на диску кожного значення в документі, тож вам доведетьсявідновити весь індекс . Це стосується також оновлень, оскільки оновлення, скажімо, текстового вмісту елемента може змінити його розмір, а це означає, що послідовний XML повинен змінюватися. Реляційна база даних зовсім не повинна торкатися індексу, якщо ви оновлюєте неіндексований стовпець; база даних XML повинна була б відновити весь індекс для кожного оновлення, що змінює розмір оновленого вузла XML.

Це найважливіші недоліки, але їх більше. XML є дуже багатослівним, що добре для зв'язку між сервером і сервером, оскільки це забезпечує безпеку (сервер, що приймає, може виконувати всілякі перевірки цілісності XML, і якщо щось перейшло не так у передачі, документ навряд чи буде підтверджений ). Однак для масового зберігання це вбивство: не рідкість мати 100% або більше накладних даних для XML-даних (не рідкість бачити накладні коефіцієнти в діапазоні 1000% для таких речей, як SOAP-повідомлення), а типові реляційні сховища БД схеми мають лише постійні накладні витрати на метадані таблиці плюс мініатюрний біт на рядок; більша частина накладних витрат у реляційних базах даних відбувається з фіксованої ширини стовпців. Якщо у вас є терабайт даних, 500% накладні витрати з багатьох причин просто неприйнятні.


21

XML - паршивий для зберігання даних. По-перше, це дуже багатослівно. Дані, що зберігаються у файлі XML, займуть набагато більше місця на диску, ніж ті самі дані, що зберігаються в будь-якій розумній системі баз даних. У записі XML ім'я певного поля буде зберігатися двічі разом із рядковим поданням даних. Так, наприклад, щоб зберегти один цілий інтегар у полі під назвою "foobar", ви закінчите з цим 19-байтовим рядком:

<foobar>42</foobar>

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

По-друге, XML повинен бути розібраний з тексту кожен раз, коли файл читається. Для вищевказаного поля справжня база даних просто зчитує бінарні дані в пам'ять із зсувом, вона знає, що вона зберігає поле "foobar" дюйма. Якщо файл зберігається як XML, він повинен прочитати поле "foobar", розібрати цей текст , визначте, що це поле, потім проаналізуйте рядок "42" та перетворіть його у двійковий 42.

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

Єдиним винятком є ​​файли конфігурації, які, як правило, невеликі, і їх взагалі потрібно редагувати людиною.

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


1
Найважливішим моментом тут є розмір файлу. Для статичних даних меншим розміром, ніж розмір мега, ефективність завантаження XML один раз не така вже й велика. Я працював над програмою близько 5 років тому і виявив, що вартість завантаження такого файлу була в області 10 мс. Смію сказати, що комп'ютери зараз трохи швидші.
Дейв

@dave: але після того, як ви перебуваєте в цій області розміру, формат XML значно втрачається у відділі "редаговані людиною".
Йоахім Зауер

Щоб ще більше висвітлити проблему, зберігання значення "1000000000" все одно складе 4 байти в реальній БД, тоді як 27 байт у XML.
Даніель Б

8

XML є життєздатним залежно від контексту. Якщо ваші дані досить статичні і не сильно змінюються (наприклад, зразки даних), так XML - це корисне використання.

Налаштування конфігурації, вибіркові дані (навіть якщо це мільйони рядків, але рідко змінюються) - це все корисне використання XML.

Читання / запис на жорсткому диску коштує дорого, набагато більше, ніж доступ до даних із стеку Oracle / Sql.


7

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

Ваше приміщення є недоліком.

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

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

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


4

Це дійсно суб’єктивно. Ця цитата, як, на думку когось, людина.

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

Погляньте на dasBlog та BlogEngine . Обидва ці програми використовують xml для зберігання даних за замовчуванням.

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


Цитата насправді з книги. Додам, що в
Кіан

2
"Низькі накладні витрати?" Я думаю, ти маєш на увазі "не вимагає установки". Доступ до даних у великому XML-файлі має величезні витрати, введення / виведення та процесор. Так, XML корисний для дрібних речей (<1МБ), але ні, XML не підходить для даних з низькою летючістю загалом, лише для дрібних речей.
GlenPeterson

Приємний великий оматор Лебовського!
InvisiblePanda

1

моє запитання: чи це все-таки дійсна заява і чи прийнятно зберігати дані за допомогою XML?

Я бачу вашу думку в прикладі про файли конфігурації .NET. Однак будь-який інший формат файлу міг бути використаний. Насправді за старих часів такі параметри зберігалися у звичайних текстових файлах, званих INI-файлами.

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

Визначення XML у XML-Definition зазначає, що "(XML) - мова розмітки, яка визначає набір правил для кодування документів у форматі, який читається людиною і читається машиною".

Це визначення зосереджується на читанні та мові, а не на механізмах управління даними.

Порівняно з RDBMS, XML не забезпечує засоби для випадкового вставлення та видалення рядків у XML-файл. Наприклад, якщо у вас є 1000000 рядків, і ви хотіли видалити рядки випадковим чином навіть в одному середовищі користувача на основі XML-файлу, це не буде вдалим вибором для бази даних. Крім того, XML не забезпечує ніяких нативних механізмів блокування даних. Насправді, оскільки XML не є програмним забезпеченням, усі властивості ACID (атомність, послідовність, ізоляція, довговічність), які гарантують надійність обробки транзакцій бази даних у спільному середовищі, залишаються розробнику (за винятком довговічності). XML не має надійних специфікацій для обробки цілісності даних у файлах XML, не кажучи вже про різних серверах (наприклад, XML-файл клієнта та замовлення файлу xml - Немає FKs для забезпечення цілісності).

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


1

XML ніколи не означав бути базою даних або замінювати її.

XML визначається в основному для веб-документів, що, allows for the creation of customized tags for individual information fields.однак, ви ніколи не досягнете реляційного централізованого управління даними з ним.


0

Чому ви насправді хочете в першу чергу використовувати XML для зберігання даних ? Я маю на увазі, це мова зрештою ...

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


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

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

0

Коротка відповідь: Це залежить.

Довга відповідь: З моєї точки зору, це сильно залежить від кількості даних, які ви хочете зберігати. Наприклад, якщо у вашій програмі під час виконання програми є кілька об'єктів, і ви хочете їх зберігати після запуску інструменту, XML-файл ідеально добре. Однак, якщо ваш веб-магазин має 5000 зберігачів і ще більше замовлень, база даних буде більш підходящим для зберігання даних.

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


0

XML - відмінний вибір для налаштувань конфігурації. Файли XML не тільки легко розбирають / виділяють в IDE, вони дуже легко редагувати непрограмістів. Я вважаю їх надзвичайно корисними у сценаріях веб-розробки, де завдання з технічного обслуговування виконують дизайнери та менеджери контенту.

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


0

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

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

У вищезгаданому сенсі, ні, XML не є базою даних, і ви не повинні намагатися використовувати її як єдину.

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

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

З іншого боку, бази даних є чудовими, коли у вас є тисячі (або мільйони / мільярди) записів, і багато користувачів одночасно оновлюють їх. Так, так, XML не є базою даних, і ви не повинні використовувати її як одну. Ваш приклад - це одна з тих ситуацій, коли вам не потрібен був БД в першу чергу, а XML - це найкраще.

Я вважаю, що це: якщо ви використовуєте XML як БД (скажімо, як резервне сховище для транзакційної системи), ви закінчите винахід і перезапис RDBMS . Це дійсно поганий спосіб витратити свій час та енергію. Я думаю, що саме про це говорила і цитата.


0

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

Сказавши, що вам це може знадобитися чи не потрібно. Якщо вам не потрібно робити багато запитів над даними, а ви лише маєте намір їх зберігати та згодом отримувати на основі деяких обмежених критеріїв запитів, тоді вам потрібно зберігання та пошук XML DOCUMENT - не реляційна база даних.

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

Ви можете використовувати засоби ORM, як Hibernate, та такі інструменти, як Apache Axis, щоб автогенерувати практично весь код, який вам знадобиться для створення служби, яка просто обробляє прості операції з CRU. Вам, можливо, доведеться зафіксувати це, звичайно, для автентифікації, і, можливо, може захотіти розділити дані на основі користувача, рівня доступу тощо. Ви навіть можете обмежити, які операції даному користувачеві дозволено робити через сервіс SOAP для приклад.

У цьому сенсі ви більше схожі на управління вмістом, ніж на все інше.

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