我正在考虑将大量数据存储在XML文件中。每个文件都有关于不同元素的信息,比如说联系人。现在我尝试根据一些信息检索联系人,例如:找到所有居住在CA的联系人。我如何搜索此信息?我可以使用像LINQ这样的东西。我看到XElement但它适用于多个XML文件。
转换为数据集有帮助吗?所以我想我的应用程序应该有一个构造函数,它将所有xml文件加载到数据集中并对数据集执行查询。如果这是一个好方法,有人可以指向我的示例/资源吗?
最重要的是这是一个很好的解决方案还是我应该使用数据库?我使用XML文件的原因是我需要扩展此解决方案,以便将来在后端层(业务逻辑,数据库)中使用xquery,我认为在xml文件中使用数据会很有帮助。
更新我已在此处拥有架构 - http://ideone.com/ZRPco
答案 0 :(得分:3)
如果将数据放在数据库中,则可以很容易地将其输出为XML。不要因为你需要在那里结束而开始使用XML。如果您需要对数据进行查询,那么数据库几乎肯定是最佳选择。
答案 1 :(得分:1)
以下是不使用XML的两个原因......
如果数据集很大,我就不会使用xml。你要么使用dom解析器(大数据速度慢)或sax解析器(速度更快,但在读取整个文件之前你会失去验证能力)。
如果数据会发生变化。您必须重写整个xml文件才能更改它的一部分。
这就是我使用XML的原因.. 如果数据集很小,则自然是分层的,并且需要在文本编辑器中可见/可编辑。
如果需要输出为xml,从数据库输出xml不是问题。
答案 2 :(得分:1)
您可以在您的事业中使用XML。只是为了理解你的例子。
贵公司可能有1000名员工。 每个员工都可以拥有零个或多个联系人(如主要,第二个等)。 所以每个雇员都可以拥有一个contacts.xml(基于Xml数据库识别,如eXist,MarkLogic,Berkely等)。
例如-contacts.xml
数据进入Xml数据库后。然后,数据库可以根据您想要的方面获取所有排序细节。
比如通过ZipCode,按城市,按名称等获取联系人。
您需要编写特定的XQuery来挖掘数据以满足您的请求。 (对于MarkLogic Xml数据库服务器)。这个世界中使用的术语是分面浏览。
Xml数据库旨在处理此类信息。将联系人视为海量数据而不是行/列。
答案 3 :(得分:1)
这里有很多评论,没有人对MarkLogic Server XML数据库有太多了解,以及当应用多种类型的索引时,XML作为存储格式的强大功能(元素,值,属性,xml结构,xml节点顺序,单词) ,短语索引)
MarkLogic可以存储/索引数十亿个XML文档,并允许对所有这些文档进行亚秒搜索,复杂的SUM COUNT MIN MAX操作等。
我已经使用C#.NET LINQ-to-XML的关系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语法,用于实现这两个文件之间的LEFT OUTER JOIN:
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)
{
}
我使用了90MB的XML文件和4-5MB的较小XML文件,并且可以在2-3秒的范围内执行多个WHERE条件的复杂搜索。
答案 4 :(得分:0)
听起来好像数据库是正确的解决方案。我在这里看到的两个要求是您需要针对数据集运行某些类型的查询,并且您需要在某个时刻使用XML。 SQL数据库将能够比XML文件更好地处理复杂查询,同时您可以在需要时始终将数据转换为XML。
答案 5 :(得分:0)
根据我的经验,使用XML作为主数据源不是一个好主意,在某些时候会很痛苦。请尝试使用SQLite,它是一个功能强大且可移植的关系数据库。