代码之家  ›  专栏  ›  技术社区  ›  satyajit

设计解决方案的指南-XML文件与数据库

  •  0
  • satyajit  · 技术社区  · 14 年前

    我正在考虑将大量数据存储在XML文件中。每个文件都有关于不同元素的信息,比如联系人。现在,我正在尝试根据一些信息检索联系人,例如:查找CA中的所有联系人。如何搜索此信息?我能用像林肯这样的东西吗?我在看 XElement 但它是否适用于多个XML文件?

    转换为数据集有帮助吗?所以我认为我的应用程序应该有一个构造函数,它将所有XML文件加载到一个数据集中,并对该数据集执行查询。如果这是一个好的方法,有人能给我指出例子/资源吗?

    最重要的是,这是一个好的解决方案还是我应该使用数据库?我使用XML文件的原因是我需要扩展这个解决方案,以便将来在后端层(业务逻辑、数据库)中使用XQuery,我认为在XML文件中保存数据会有所帮助。

    更新 我这里已经有了模式- http://ideone.com/ZRPco

    6 回复  |  直到 13 年前
        1
  •  1
  •   kadalamittai    14 年前

    您可以在自己的事业中使用XML。只是为了理解你的例子。

    你的公司可能有1000名员工。 每个员工都可以有零个或多个联系人(如初级、次级等)。 因此每个雇员都可以有contacts.xml(根据exist、marklogic、berkely等XML数据库进行标识)。

    例如)-contacts.xml

    一旦数据在XML数据库中。然后数据库可以根据您想要的任何方面获取所有排序细节。

    比如通过邮政编码、城市、名字等获取联系人。

    您只需要编写特定的XQuery来为您的请求挖掘数据。(对于MarkLogic XML数据库服务器)。这个世界上使用的术语是分面浏览。

    XML数据库设计用于处理此类信息。将联系人视为批量数据,而不是行/列。

        2
  •  3
  •   Skilldrick    14 年前

    如果将数据放在数据库中,那么很容易将其输出为XML。不要仅仅因为你需要在XML中结束而从XML开始。如果您需要对数据进行查询,那么数据库几乎肯定是最佳选择。

        3
  •  1
  •   Don Dickinson    14 年前

    以下是不使用XML的两个原因…

    1. 如果数据集很大,我不会使用XML。您要么有一个使用DOM解析器(大数据速度慢)要么有一个SAX解析器(速度快,但在读取整个文件之前,您将失去验证能力)。

    2. 如果数据要改变的话。为了更改XML文件的一部分,必须重写整个XML文件。

    这就是我使用XML的原因。 如果数据集很小,则自然是分层的,并且需要在文本编辑器中查看/编辑。

    如果需要输出为XML,则从数据库输出XML不是问题。

        4
  •  1
  •   Justin    13 年前

    这里有很多评论,没有人对MarkLogic Server XML数据库有太多的了解,当应用多种类型的索引(元素、值、属性、XML结构、XML节点顺序、字、短语索引)时,XML作为存储格式的功能有多强大。

    MarkLogic可以存储/索引数十亿个XML文档,并允许在所有文档中进行次秒搜索、复杂的和数最小值最大值操作等。

    我使用了带有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语法示例,用于实现这两个文件之间的左外部联接:

    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条件的复杂搜索。

        5
  •  0
  •   Justin Lucas    14 年前

    听起来数据库肯定是正确的解决方案。我在这里看到的两个需求是,您将需要对数据集运行某些类型的查询,并且您需要它在某一点上是XML格式的。SQL数据库将能够比XML文件更好地处理复杂的查询,同时,在需要时,您可以随时将数据转换为XML。

        6
  •  0
  •   Jafet    14 年前

    根据我的经验,使用XML作为主数据源不是一个好主意,在某种程度上这将是一个痛苦。尝试使用sqlite,它是一个功能强大且可移植的关系数据库。