Руководство по разработке решения - XML-файлы против базы данных - PullRequest
0 голосов
/ 28 июля 2010

Я думаю о хранении группы данных в файлах XML.Каждый файл будет содержать информацию об отдельном элементе, скажем, контактах.Теперь я пытаюсь восстановить контакт на основе некоторой информации, например: Найти все контакты, которые живут в ЦА.Как мне найти эту информацию?Могу ли я использовать что-то вроде LINQ.Я вижу XElement , но работает ли он для нескольких файлов XML.

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

И самое главное это хорошее решение или я должен использовать базы данных?Причина, по которой я использую XML-файлы, заключается в том, что мне нужно расширить это решение для использования xquery на внутренних уровнях (бизнес-логика, база данных) в будущем, и я подумал, что наличие данных в xml-файлах будет полезно.

Обновление У меня уже есть схема здесь - http://ideone.com/ZRPco

Ответы [ 6 ]

3 голосов
/ 28 июля 2010

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

1 голос
/ 17 февраля 2011

Здесь много комментариев, никто не имеет большого понимания XML-баз данных MarkLogic Server и того, насколько мощным XML может быть формат хранения при применении нескольких типов индексов (элемент, значение, атрибут, структура xml, порядок узлов xml, слово , словосочетания)

MarkLogic может хранить / индексировать миллиарды документов XML и разрешать поиск во всех них за доли секунды, сложные операции SUM COUNT MIN MAX и т. Д.

Я использовал реляционные XML-файлы с C # .NET LINQ-to-XML, чтобы добиться того, чего хочет добиться оригинальный постер. (На данный момент нет MarkLogic, просто простые XML-файлы и код C # LINQ, который объединяет их для достижения любого типа поиска, который я ищу). Возможно, у вас есть XML-файл для контактов:

<contacts>
  <contact id="1" companyid="1">
    <name></name>
    <address></address>
    <city></city>
    <state></state>
  </contact>
</contacts>

Вы также можете присоединить это к другому XML-файлу для компаний:

<companies>
  <company id="1">
    <name></name>
    <address></address>
    <city></city>
    <state></state>
  <company>
</companies>

Ниже приведен пример синтаксиса C # .NET LINQ-to-XML для выполнения ЛЕВОГО НАРУЖНОГО СОЕДИНЕНИЯ между этими двумя файлами:

using System.Xml.Linq.XDocument 

XDocument xDocContacts = XDocument.Load("contacts.xml");
XDocument xDocCompanies = XDocument.Load("companies.xml");

var results = from ct in xDocContacts.Root.Element("contacts").Elements("contact")
              join cp in xDocCompanies.Root.Element("companies").Elements("company")
              on ct.Attribute("companyid").Value.ToString() equals cp.Attribute("id").Value.ToString()
              into joined
              select joined.DefaultIfEmpty();
foreach (var item in joinedResults)
{
}

Я использовал это для XML-файлов размером 90 МБ, соединяющихся с меньшими XML-файлами 4-5 МБ, и могу выполнять сложный поиск с несколькими условиями WHERE в диапазоне 2-3 с.

1 голос
/ 28 июля 2010

Вы можете использовать XML в вашем деле. просто чтобы понять ваш пример.

в вашей компании может быть 1000 сотрудников. Каждый сотрудник может иметь ноль или более контактов (например, основной, дополнительный и т. Д.). поэтому каждый сотрудник может иметь файл contacts.xml (идентифицируемый на основе баз данных Xml, таких как eXist, MarkLogic, Berkely и т. д.).

например. -Contacts.xml

Как только Данные находятся внутри базы данных Xml. Затем база данных может получить все детали сортировки на основе того, что вы хотите.

как выборка контактов по ZipCode, по городу, по имени и т. Д.

Все, что вам нужно, это написать специальный XQuery для сбора данных по вашему запросу. (в случае сервера баз данных MarkLogic Xml). Терминология, используемая в этом мире, - это просмотр граней.

Базы данных Xml предназначены для обработки такой информации. Просмотр контактов в виде массовых данных, а не строк / столбцов.

1 голос
/ 28 июля 2010

Вот две причины не использовать XML ...

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

  2. , если данныесобираюсь измениться.Вы должны переписать весь XML-файл, чтобы изменить его часть.

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

Если вам нужно вывести как xml, это не проблема для вывода xml из базы данных.

0 голосов
/ 28 июля 2010

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

0 голосов
/ 28 июля 2010

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

...