Database-Design
如何在磁碟上儲存樹
我想知道如何將樹儲存在物理磁碟上,可能是面向樹的數據庫,如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 匹配你好”,或者只是“給我所有低於 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) 使您能夠使用的索引的可用性在給定節點屬性的情況下快速查找節點,例如按名稱索引元素。