我想要一个临时数据存储,我可以存储按班级学生人数分组的学生信息。由于使用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的学生。
首先我将能够检索/过滤这样的XML节点,即通过 指定一个属性值,每次都会解析和搜索整个XML吗?
效率如何?请记住数量
<ClassSet>
个节点最多可达1000个或更多节点
数百名学生。
如果效率不高,我可以拥有的其他选择 无法使用RDMS或任何嵌入式数据库的限制 在哪里?
答案 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),这样您就不需要安装服务器,这些数据会将数据保存在磁盘上,只缓存最近使用的索引。