Здесь много комментариев, никто не имеет большого понимания 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 с.