Когда я буду использовать XML вместо SQL? [закрыто]


102

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

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


4
Я думаю, что вопрос более точен в сравнении XML с СУБД, а не с SQL.
JAL


4
Я думаю, что вопрос точнее ФАЙЛ против РСУБД, а не XML против SQL.
pfeds,

Если у вас есть время, недавний лауреат премии Тьюринга Майкл Стоунбрейкер «What Goes Around Comes Around» представляет собой отличную статью об истории баз данных, в том числе о том, как базы данных XML повторяют прошлые ошибки.
Джеффри Босбум,

Ответы:


100

Чтобы процитировать эту книгу (Эффективный XML: 50 конкретных способов улучшить свой XML):

«XML - это не база данных. Он никогда не задумывался как база данных. Это никогда не будет базой данных. Реляционные базы данных - это проверенная технология с более чем 20-летним опытом внедрения. Это твердые, стабильные, полезные продукты. Они никуда не денутся. XML - очень полезная технология для перемещения данных между разными базами данных или между базами данных и другими программами. Однако это не база данных. Не используйте это как одно ».

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


1
Я понимаю, что этот ответ был написан в 2008 году, но с появлением ряда систем баз данных на основе файлов я задаюсь вопросом, имеют ли они больше смысла, чем обычные СУБД в ряде ситуаций. SQL был разработан в темные века, когда дисковое пространство было дорогостоящим, и стал образцом мышления в индустрии программного обеспечения. Это не значит, что это правильно с точки зрения современных методов.
pfeds

Это все еще не делает XML базой данных, а просто форматом сериализации для чего-то, что вы храните в BLOB. Это может быть полезно для вас, но не делает XML заменой полнофункционального средства запросов.
ConcernedOfTunbridgeWells

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

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

1
в настоящее время вы можете использовать XQuery для баз данных XML.
Дон Диланга 08

23

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

Следующая ссылка неплохо описать при использовании XML: Почему я должен использовать XML?


Обновление ссылки от 06.09.2012
wip

15

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

SQL хорош для хранения и поиска. XML хорош для передачи и форматирования.


10

1) Когда вам нужно обмениваться данными с другими. XML - это « лингва-франка » Интернета: его может читать и интерпретировать практически каждый, в отличие от файла базы данных.

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, необходимо использовать другой SQL для каждой из 12 баз данных для одной и той же операции (SELECT, INSERT и т. Д.).

Один из вариантов внедрения операторов SQL в веб-приложение - разместить их в файлах XML. Каждый XML-файл содержит набор операторов SQL для одной из дюжины баз данных. Код определяет, к какой базе данных осуществляется доступ для вошедшего в систему пользователя, и извлекает соответствующий SQL из указанного файла XML.

Как и в случае с хранимыми процедурами, SQL в файле XML можно обновлять без остановки или перекомпиляции приложения.



0

Я бы никогда не использовать XML для хранения своих данных.

Мы используем преобразования XSLT в качестве уровня абстракции данных в нашем приложении SOA. Все объекты отправляют друг другу данные в XSLT, поэтому им нужно понимать только один язык. За исключением коннектора базы данных, который должен иметь возможность преобразовывать данные в SQL для отправки их в БД.

Таким образом, у вас не будет генерации строки SQL, распределенной по миллиону объектов в вашем приложении. Значительно упрощает обслуживание.


«Все объекты отправляют друг другу данные в XSLT» Серьезно?
Горан,

Все, кто общается по служебной шине.
Treb,

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

Да, вы правы - мне нужно перефразировать.
Treb,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.