2008-10-14 2 views
89

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

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

+1

Я думаю, что вопрос более точно XML и RDBMS, а не SQL. – JAL 2009-12-30 11:46:09

+0

http://en.wikipedia.org/wiki/Xml_database – 2010-01-24 22:59:10

+4

Я думаю, что вопрос более точно - FILE vs. RDBMS, а не XML и SQL. – pfeds 2013-02-25 06:30:18

ответ

90

Цитирую This Book (Эффективная XML: 50 конкретных способов улучшить XML):

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

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

20

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

Следующая ссылка не плохо описать при использовании XML: Why should I use XML ?

+0

Хороший вентилятор. +1 – ConcernedOfTunbridgeWells 2008-10-14 15:42:34

1

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

Также, как упоминалось в предыдущем посте, формат обмена.

10

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

2) Когда ваш объем данных мал, и вам не нужно выполнять сложные запросы против него. Файлы XML хороши для таких вещей, как сохранение конфигурации или шаблонов документов.

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

13

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

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

1

И XML, и RDMS могут использоваться как хранилища данных, но каждая реализация имеет свои преимущества и недостатки.

Использование XML для хранения данных для веб-приложения обычно не является большой проблемой, пока вы не начнете работать с большими объемами данных, или вы решите, что хотите узнать другую информацию из своих данных (например: интеллектуальный анализ данных). Другими словами, хранение больших объемов XML-файлов для источника данных не очень масштабируемо, но облегчает перемещение данных. XML также может использоваться для сериализации сложных объектов в нереляционном формате, что может устранить необходимость в ORM, если вы можете сериализовать/десериализовать объекты непосредственно из XML.

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

0

Некоторые приложения используют файлы XML для хранения конфигурации, поэтому я предпочитаю использовать SQLite.

1

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

0

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

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

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

1

Вот пример использования XML с SQL: Аутентифицированные пользователи считывают и записывают данные в различные базы данных, не все из которых являются одинаковыми СУБД. Пользователи для компании A используют данные из локальной базы данных SQL Server. Пользователи для компании B используют данные из удаленной базы данных Oracle. И так далее. Десять разных баз данных, каждая из которых имеет несколько разные схемы для одних и тех же базовых данных.

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

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

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

5

Вещи я использую XML для:

  • сохраняющиеся иерархию объектов.
  • Перемещение данных из одного процесса или машины в другой.
  • Данные, которые редко меняются, если вообще; настройки конфигурации и т.п.
  • Как вход в преобразования XSLT: вообще говоря, если одна из моих программ испускает HTML, для этого используется XSLT, поэтому исходные данные будут представлены как XML в некотором
  • Текстовая разметка. (Давайте не будем забывать об этом!)

Существует не так много перекрытий между этими вариантами использования и вариантами использования для базы данных. Некоторые, но не очень.

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

Так вот случай, который выглядит, как я использую XML в качестве базы данных. Но я действительно нет. Я использую объектную модель, которая реализует множество функциональных возможностей, подобных базе данных, и я использую XML в качестве формата персистентности.

2

Я считаю, что есть довольно много коммерческих приложений, которые интенсивно используют XML в качестве носителя информации. Я сделал это для приложения планирования проекта, где пользователь хранит каждый проект в собственном файле. Приложение работает на USB-накопителе и требует нулевой установки. Все данные извлекаются из XML и обрабатываются в памяти, поэтому getRecord (id) быстро гаснет.

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

Смежные вопросы