热门问题
时间线
聊天
视角
文檔導向資料庫
用於儲存、檢索與管理半結構化、物件導向資訊的電腦程式 来自维基百科,自由的百科全书
Remove ads
文檔導向資料庫(英語:Document-oriented database)或文件儲存,是用於儲存、檢索和管理文件導向的資訊的一種電腦程式。這裡稱為文件的是半結構化資料[1],它是不完全形式的結構化資料,不服從於與關聯式資料庫或其他形式資料表有關聯之資料模型的形式結構,然而卻包含標籤或其他標記,用以在資料內分割語意元素和強制記錄和欄位的層級,因此它也叫做「自我描述結構」。
概述
文檔導向資料庫是NoSQL資料庫的主要類別之一,且「文檔導向資料庫」一詞的普及程度也因術語NoSQL的使用而有所增長[2] 。XML資料庫是針對XML文件做了最佳化的文檔導向資料庫的子類。圖資料庫與之相似,但其添加了一個連接各文件的「聯絡」層,以便進行快速遍歷。一些搜尋引擎(也稱為資訊檢索)系統如Elasticsearch提供了足夠的對文件的核心操作從而已經滿足了文檔導向資料庫的定義。
鍵-值資料庫是NoSQL資料庫的另一概念,文檔導向資料庫是鍵-值資料庫的子類。它們的差別在於處理資料的方式:在鍵值資料庫中,資料是對資料庫不透明的;而文檔導向資料庫系統依賴於「文件」的內部結構來取得元資料,資料庫引擎使用這些元資料進行更深層次的最佳化。雖然由於系統中的工具使這一差別不甚明顯,[a]但在設計概念上,這種文件儲存方式利用了現代程式技術來提供更豐富的體驗。現代鍵-值儲存經常包括處理元資料的特徵,模糊了它與文件儲存之間的界線。
文件資料庫[b]與傳統的關聯式資料庫差異顯著。關聯式資料庫通常將資料儲存在相互獨立的表中,這些表由程式開發者定義,一個單一的對象可能散布在若干表中。 對於一個給定對象,文件資料庫將其所有資訊儲存在資料庫內某個單一實例中,並且儲存的每一個對象可以不同於任一其它對象。這簡化了將對象裝載入資料庫的過程,通常能消除對對象關係對映等類似方案的需求。文件資料庫不同於關聯式資料庫,關聯式資料庫基於了關係模型,而文件資料庫採用了半結構化模型,沒有在資料和模式(schema)之間的分離,使用的結構的數量依賴於目標用途。在半結構化資料中,屬於相同類的實體可有不同的特性,即使它們被分組在一起,並且屬性的次序是不重要的。
Remove ads
文件
文檔導向資料庫中心概念是「文件」這個概念。儘管每個文檔導向資料庫實現在這個定義的細節上都有所不同,一般而言,它們都假定文件以某種標準格式或編碼來封裝和編碼資料(或資訊)。文檔導向資料庫使用的編碼包括XML、YAML、JSON和BSON,有的實現還可以儲存二進制文件格式如PDF和Microsoft Office文件(MS Word、Excel之類)。
在文件儲存中的文件粗略的等價於對象這個編程概念。不要求它們遵守標準模式(schema),也不要求它們都有同樣的章節、插槽(slot)、部分(part)或鍵。一般地說,使用對象的程式有很多不同的對象類型,而這些對象經常有很多可選的欄位(field)。每個對象,即使是同類的,也可以看起來非常不同。文件儲存類似於此,它們在一個單一儲存中允許不同類型的文件,執行在文件中的欄位是可選的,並且經常允許它們使用不同的編碼系統來編碼。例如,下面是一個文件,採用JSON編碼:
{
"FirstName": "Bob",
"Address": "5 Oak St.",
"Hobby": "sailing"
}
第二個文件可以採用XML來編碼:
<contact>
<firstname>Bob</firstname>
<lastname>Smith</lastname>
<phone type="Cell">(123) 555-0178</phone>
<phone type="Work">(890) 555-0133</phone>
<address>
<type>Home</type>
<street1>123 Back St.</street1>
<city>Boys</city>
<state>AR</state>
<zip>32225</zip>
<country>US</country>
</address>
</contact>
這兩個文件相互共享一些結構性元素,但每個都有唯一性元素。在文件內部的結構和正文及其他資料通常被稱為文件的「內容」,並可以通過通過檢索或編輯方法(見下文)來參照。關聯式資料庫中,所有記錄包含同樣的欄位,保留未使用欄位為空;不同於關聯式資料庫,在上述例子的這兩個文件(記錄)中都沒有空「欄位」。這種方式允許向某些記錄增加新資訊而不要求在資料庫中的所有其他記錄共享相同結構。
文件資料典型的提供了關聯於文件內容並與之一起儲存的額外的元資料。這種元資料還可以與增進資料儲存有關,提供組織文件,提供安全性,或其他特定於實現的特性。
Remove ads
文件導向資料對文件提供類似於其他資料庫的核心操作,儘管術語未完全標準化,大多數實踐者將它們認可為CRUD:
- 建立(或插入)
- 檢索(或查詢、尋找、讀取或尋找)
- 更新(或編輯)
- 刪除(或移除)
在資料庫的文件通過代表這個文件的唯一的「鍵」來定址。鍵是一個簡單的識別碼(簡寫為ID),典型的是字串、URI或路徑。鍵可以用來從資料中檢索文件。資料庫典型的在鍵上保有索引來加速文件檢索,並且在某些情況下要求用鍵來把文件建立或插入到資料庫中。
文件導向資料的另一個定義特徵,使之超越可用來檢索文件的簡單的鍵到文件尋找,就是資料庫提供允許使用者基於內容(或元資料)來檢索文件的API或查詢語言。例如,你可能需要一個查詢,檢索特定欄位被設定為特定值的所有文件。可獲得的查詢API或查詢語言的特徵的集合,還有查詢的預期效能,在不同實現之間有顯著差異。類似的,可獲得的索引選項和組態的特有集合隨著不同實現而有著巨大差異。
文件儲存和鍵-值儲存有很大差異。在理論上,在鍵-值儲存中值對於儲存是不透明的,它們本質上是黑箱子。它們可以提供類似於文件儲存的的尋找系統,但是對內容的組織有著更少的理解。文件儲存使用在文件中的元資料來分類內容,例如允許它們理解一個數字序列是電話號碼,而另一個是郵政編碼。這允許它們在這種類型的資料上進行尋找,例如,包含555的所有電話號碼,但忽略郵編 55555。
文件資料典型的提供某種機制來更新或編輯文件的內容(或元資料),替換要麼允許在整個文件上,要麼在文件的個別結構片段上。
文件資料庫實現提供各種方式來組織文件,包括如下概念:
- 收集(Collection):成組的文件,依賴於具體實現,文件可以被強制存留在一個收集內部,也可以被允許存留在多個收集之內。
- 標籤(Tag)和不可見元資料:在文件內容之外的附加資料。
- 目錄層級:組織成樹狀結構的成組文件,典型的基於路徑或URI。
有時這些組織概念在它們是邏輯的還是物理的、(比如在磁碟上還是在主記憶體中)、表示等方面有一些變化。
實現
Remove ads
大多數XML資料庫是文檔導向資料庫。
注釋
參考文獻
延伸閱讀
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads