Я работаю над веб-приложениями, управляемыми базами данных, уже несколько лет и недавно взял на себя проект, связанный с CMS, поддерживающей XML. Это заставило меня задуматься об использовании XML / XSLT в целом и о том, в каких ситуациях это было бы более полезно, чем подход, который я всегда использовал, когда все мои данные хранятся в базе данных (My) SQL, а затем используются PHP / Python / и т. д. для работы с ним в Интернете по мере необходимости.
Очевидно, я кое-что не понимаю ... может ли кто-нибудь привести мне примеры приложений, в которых предпочтительнее было бы хранить данные в файлах XML, а не в базе данных?
Я думаю, что вопрос точнее ФАЙЛ против РСУБД, а не XML против SQL.
Если у вас есть время, недавний лауреат премии Тьюринга Майкл Стоунбрейкер "Что посеешь, то и пожнешь" - отличная статья об истории баз данных, в том числе о том, как базы данных XML повторяли прошлые ошибки.


Используйте XML для создания файлов, которые необходимо отправить в другие приложения. XML больше подходит как формат обмена данными, чем как формат хранения данных.
Следующая ссылка неплохо описать при использовании XML: Зачем мне использовать XML?
Обновление ссылки от 06.09.2012: xml.silmaril.ie/index.html
Всякий раз, когда у вас нет роскоши иметь базу данных (подумайте о однопользовательских приложениях) или вам нужен очень легкий формат хранения.
Также, как упоминалось на предыдущем плакате, формат обмена.
1) Когда вам нужно обмениваться данными с другими. XML - это «лингва франка» Интернета - почти каждый может его прочитать и интерпретировать, в отличие от файла базы данных.
2) Когда объем ваших данных невелик и вам не нужно выполнять сложные запросы к нему. Файлы XML хороши для таких вещей, как хранение конфигурации или шаблонов документов.
3) Когда у вас мало писателей, пытающихся получить доступ к одним и тем же данным. В базах данных SQL задействованы механизмы параллелизма, которые работают за вас за кулисами. Базы данных SQL могут поддерживать индексы для быстрого поиска информации о больших наборах данных ...
Процитируем Эта книга (Эффективный XML: 50 конкретных способов улучшить ваш XML):
“XML is not a database. It was never meant to be a database. It is never going to be a database. Relational databases are proven technology with more than 20 years of implementation experience. They are solid, stable, useful products. They are not going away. XML is a very useful technology for moving data between different databases or between databases and other programs. However, it is not itself a database. Don't use it like one.“
Я думаю, что это резюмирует, если немного прямо. XML - это формат обмена данными. Можно иметь библиотеки синтаксического анализа XML, которые могут запрашивать DOM с выражениями XPath, но это не то же самое, что СУБД. Вы можете создать СУБД с интерфейсом DOM / XPath, но для получения свойств ACID или масштабирования до больших наборов данных вам необходимо реализовать механизм СУБД и формат данных с индексами, журналированием и другими артефактами СУБД, что (по определению) делает это нечто иное, чем XML.
Я понимаю, что этот ответ был написан в 2008 году, но с появлением ряда систем баз данных на основе файлов я задаюсь вопросом, имеют ли они больше смысла, чем обычные СУБД в ряде ситуаций. SQL был разработан в темные времена, когда дисковое пространство было дорогостоящим, и стал образцом мышления в индустрии программного обеспечения. Это не значит, что это правильно с точки зрения современных методов.
Это по-прежнему не делает XML базой данных, а просто форматом сериализации для чего-то, что вы храните в BLOB. Это может быть полезно для вас, но это не делает XML заменой полнофункционального средства запросов.
Более эффективное управление дисковым пространством - не единственное преимущество реляционных баз данных. Большинство реляционных баз данных работают с фиксированными длинами полей и записей, что позволяет им реагировать в постоянное время на любой запрос, в то время как XML-, Yaml-, JSon- и другие текстовые хранилища данных в основном основаны на тексте, поэтому все запросы выполняются посредством синтаксического анализа текста, который требует огромных затрат процессорного времени и может выполняться за непредсказуемое количество времени. Это можно было обойти только с помощью дорогостоящей (с точки зрения процессорного времени) предварительной буферизации с огромными требованиями к памяти.
Если я напишу SQL SP для извлечения данных и использую HTML для отображения вместо файла XSLT, будет ли это быстрее или примерно так же?
в настоящее время вы можете использовать XQuery для баз данных XML.
SQL - это хорошие табличные данные - данные, которые легко помещаются в строки и столбцы. XML хорош для иерархических данных - данных, которые имеют несколько уровней разного размера.
SQL хорош для хранения и поиска. XML хорош для передачи и форматирования.
Как XML, так и RDMS могут использоваться в качестве хранилищ данных, но каждая реализация имеет свои преимущества и недостатки.
Использование XML для хранения данных для веб-приложения обычно не представляет большой проблемы, пока вы не начнете работать с большими объемами данных или не решите, что хотите получить другую информацию из своих данных (например, интеллектуальный анализ данных). Другими словами, хранение больших объемов XML-файлов для источника данных не очень масштабируемо, но упрощает перемещение данных. XML также можно использовать для сериализации сложных объектов в нереляционном формате, что может устранить необходимость в ORM, если вы можете сериализовать / десериализовать свои объекты непосредственно из XML.
RDMS (базы данных) обычно более масштабируемы, предлагают большую поддержку параллелизма и намного быстрее при работе с большими объемами данных. Реляционная модель упрощает дальнейший поиск данных. Базы данных действительно страдают от объектно-реляционного несоответствия импеданса (http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch), что может потребовать от вас написания уродливого кода или использования сложных ORM.
Некоторые приложения используют файлы XML для хранения конфигурации, я предпочитаю использовать для этого SQLite.
Я бы пошел, если бы у меня были ограниченные базы данных mysql на моем хосте, тогда я бы увидел возможность использования XML в качестве хранилища данных.
Я бы никогда использовал любой XML для хранения моих данных.
Мы используем преобразования XSLT в качестве уровня абстракции данных в нашем приложении SOA. Все объекты отправляют друг другу данные в XSLT, поэтому им нужно понимать только один язык. За исключением коннектора базы данных, который должен иметь возможность преобразовывать данные в SQL для отправки их в БД.
Таким образом, у вас не будет генерации строки SQL, распределенной по миллиону объектов в вашем приложении. Облегчает обслуживание.
«Все объекты отправляют друг другу данные в XSLT» Серьезно?
Все те, кто общается по служебной шине.
XSLT - это язык для преобразования XML, чтобы не передавать информацию. Я полагаю, вы могли бы использовать XSLT для отправки данных, поскольку это подмножество XML, но зачем вам это нужно?
Да, вы правы, мне нужно перефразировать это.
Вот пример использования XML с SQL: Прошедшие проверку пользователи читают и записывают данные в различные базы данных, не все из которых являются одной и той же СУБД. Пользователи компании A используют данные из локальной базы данных SQL Server. Пользователи компании B используют данные из удаленной базы данных Oracle. И так далее. Десяток разных баз данных, каждая из которых имеет немного разные схемы для одних и тех же базовых данных.
Разработчик веб-сайта не имеет возможности создавать хранимые процедуры в удаленных базах данных. SQL необходимо отправлять прямо из веб-приложения в базу данных. Поскольку каждая база данных имеет немного другой синтаксис и схему SQL, необходимо использовать разные SQL для каждой из 12 баз данных для одной и той же операции (SELECT, INSERT и т. д.).
Один из вариантов внедрения операторов SQL в веб-приложение - разместить их в файлах XML. Каждый XML-файл содержит набор операторов SQL для одной из дюжины баз данных. Код определяет, к какой базе данных осуществляется доступ для вошедшего в систему пользователя, и извлекает соответствующий SQL из указанного файла XML.
Как и в случае с хранимыми процедурами, SQL в файле XML можно обновлять без остановки или перекомпиляции приложения.
Для чего я использую XML:
Между этими вариантами использования и вариантами использования базы данных не так много совпадений. Некоторые, но не очень.
По иронии судьбы, где я сейчас наиболее активно использую XML, так это в настольном приложении, которое создает ADO DataSet в памяти и использует методы WriteXml и ReadXml DataSet для его сохранения и извлечения. Я использую ADO, потому что намного проще динамически построить модель данных, определяемую метаинформацией, с помощью ADO, чем реализовать мою собственную объектную модель для задачи.
Итак, вот случай, когда выглядит, как будто я использую XML в качестве базы данных. Но на самом деле это не так. Я использую объектную модель, которая реализует множество функций, подобных базам данных, и я использую XML в качестве формата сохранения.
Не надо.
Попробуйте ВЫБРАТЬ автора ИЗ книги
Я считаю, что существует довольно много коммерческих приложений, активно использующих XML в качестве носителя информации. Я сделал это для приложения для планирования проектов, где пользователь хранит каждый проект в отдельном файле. Приложение находится на USB-накопителе и не требует установки. Все данные извлекаются из XML и обрабатываются в памяти, поэтому getRecord (id) работает быстро.
Итак, мой ответ был бы ... когда данные достаточно малы, чтобы храниться в памяти, база данных перестает работать.
Я думаю, что вопрос более точен в сравнении XML с СУБД, а не с SQL.