我想知道如何在物理磁盘上存储树,也许是像XML 数据库这样的面向树的数据库。
维基百科关于 XML 数据库的陈述:
...自定义优化的数据结构用于存储和查询。这通常会提高只读查询和更新方面的性能。XML 节点和文档是(逻辑)存储的基本单元,就像关系数据库具有字段和行一样。
但没有解释将树存储在磁盘上的实际数据结构是什么。想知道是否有人可以解释它是如何工作的。似乎您可以将每个“文档”存储为自己的文件,例如作为文件:
<a>
<b>
<c>
<d>Hello</d>
</c>
<c>
<x>World</x>
</c>
<e>
<f ref="b:0/c:0/d"></f>
</e>
<g>
<f ref="b:0/c:0/x"></f>
</g>
</b>
<b>
<c>
<d>Hello2</d>
</c>
<c>
<x>World2</x>
</c>
<e>
<f ref="b:1/c:0/d"></f>
</e>
<g>
<f ref="b:1/c:0/x"></f>
</g>
</b>
</a>
然后你会有一个查询“给我所有 b/c/x,其中 b/c/d 匹配 Hello”,或者只是“给我所有 c 下面的节点”。是指向特定节点的ref="b:0/c:0/d"
指针,类似的东西。
基本上我想知道,为了完成这些事情,用于在磁盘上存储 XML 或任何树结构的数据结构。
也许不是将整个 XML 文档存储在一个文件中,而是最终存储如下内容:
a/b/c/d Hello
a/b/c/d World
a/b/e/f ref=b:0/c:0/d
a/b/g/f ref=b:0/c:1/d
...
这正是我想知道的,数据在物理层面上在磁盘文件中的样子。不太确定要搜索什么。XML 数据库数据结构等不会返回太多。
对于这些问题,每个 XML 数据库都有自己的解决方案。探索开放源代码 XML 数据库的源代码可能会做得更糟。
任何解决方案的主要方面将是 (a) 通过遵循某种指针结构而不是通过解析原始 XML 和顺序搜索从节点导航到其子节点或父节点的能力,(b) 使您能够使用的索引的可用性在给定节点属性的情况下快速查找节点,例如按名称索引元素。