将大量数据存储为XML,以便更快,更有效地进行查询

时间:2016-10-28 06:43:29

标签: c# .net xml

我想要一个临时数据存储,我可以存储按班级学生人数分组的学生信息。由于使用RDMS不是一种选择,所以现在我决定将其存储为XML。在类似于此的结构中。

<ListOfStudents>
    <ClassSet noOfStudents="1">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>
    <ClassSet noOfStudents="2">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>
    <ClassSet noOfStudents="3">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>
    <ClassSet noOfStudents="4">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>
    <ClassSet noOfStudents="5">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>
…
…

<ClassSet noOfStudents="50065">
        <Student first="asf" last="asf">
        <Student first="asf" last="asf">
        ...
    </ClassSet>

</ListOfStudents>

基本目的是能够检索具有指定学生人数的班级的所有学生。对于例如查询所有班级noOfStudents等于93的学生。

  1. 首先我将能够检索/过滤这样的XML节点,即通过 指定一个属性值,每次都会解析和搜索整个XML吗?

  2. 效率如何?请记住数量     <ClassSet>个节点最多可达1000个或更多节点     数百名学生。

  3. 如果效率不高,我可以拥有的其他选择     无法使用RDMS或任何嵌入式数据库的限制     在哪里?

1 个答案:

答案 0 :(得分:1)

如果您使用XDocument,它将被解析为一次对象。但是,如果您编写类来保存此数据,然后通过序列化来读取/写入该数据,那么性能会更好。

这是因为要查找属性值,您的代码将直接转到属性值...选择(x =&gt; x.Age&gt; = 18)而使用XDocument,您的代码必须查找值从列表...选择(x =&gt; x.Element(“年龄”)。值&gt; = 18)

点击此处查看示例Select XElement where child element has a value

为什么不能使用数据库?如果有大量数据,那么内存不是一个好的解决方案。您可以使用嵌入式数据库(SQLite,RavenDB),这样您就不需要安装服务器,这些数据会将数据保存在磁盘上,只缓存最近使用的索引。