热门问题
时间线
聊天
视角

文檔導向資料庫

用於儲存、檢索與管理半結構化、物件導向資訊的電腦程式 来自维基百科,自由的百科全书

Remove ads

面向文檔的數據庫(英語:Document-oriented database)或文檔存儲,是用於存儲、檢索和管理面向文檔的信息的一種計算機程序。這裡稱為文檔的是半結構化數據英語Semi-structured data[1],它是不完全形式的結構化數據,不服從於與關係數據庫或其他形式數據表有關聯之數據模型的形式結構,然而卻包含標籤或其他標記,用以在數據內分割語義元素和強制記錄和字段的層級,因此它也叫做「自我描述結構」。

概述

面向文檔的數據庫是NoSQL數據庫的主要類別之一,且「面向文檔的數據庫」一詞的普及程度也因術語NoSQL的使用而有所增長[2]XML數據庫英語XML database是針對XML文檔做了優化的面向文檔的數據庫的子類。圖數據庫與之相似,但其添加了一個連接各文檔的「聯繫」層,以便進行快速遍歷。一些搜索引擎(也稱為信息檢索)系統如Elasticsearch提供了足夠的對文檔的核心操作從而已經滿足了面向文檔的數據庫的定義。

鍵-值數據庫是NoSQL數據庫的另一概念,面向文檔的數據庫是鍵-值數據庫的子類。它們的差別在於處理數據的方式:在鍵值數據庫中,數據是對數據庫不透明的;而面向文檔的數據庫系統依賴於「文檔」的內部結構來獲取元數據,數據庫引擎使用這些元數據進行更深層次的優化。雖然由於系統中的工具使這一差別不甚明顯,[a]但在設計概念上,這種文檔存儲方式利用了現代程序技術來提供更豐富的體驗。現代鍵-值存儲經常包括處理元數據的特徵,模糊了它與文檔存儲之間的界線。

文檔數據庫[b]與傳統的關係數據庫差異顯著。關係數據庫通常將數據存儲在相互獨立的表中,這些由程序開發者定義,一個單一的對象可能散布在若干表中。 對於一個給定對象,文檔數據庫將其所有信息存儲在數據庫內某個單一實例中,並且存儲的每一個對象可以不同於任一其它對象。這簡化了將對象裝載入數據庫的過程,通常能消除對對象關係映射等類似方案的需求。文檔數據庫不同於關係數據庫,關係數據庫基於了關係模型,而文檔數據庫採用了半結構化模型英語Semi-structured model,沒有在數據和模式(schema)之間的分離,使用的結構的數量依賴於目標用途。在半結構化數據中,屬於相同實體可有不同的特性英語Variable and attribute (research),即使它們被分組在一起,並且屬性的次序是不重要的。

文檔

面向文檔的數據庫中心概念是「文檔」這個概念。儘管每個面向文檔的數據庫實現在這個定義的細節上都有所不同,一般而言,它們都假定文檔以某種標準格式編碼來封裝和編碼數據(或信息)。面向文檔的數據庫使用的編碼包括XMLYAMLJSONBSON,有的實現還可以存儲二進制文檔格式如PDF和Microsoft Office文檔(MS WordExcel之類)。

在文檔存儲中的文檔粗略的等價於對象這個編程概念。不要求它們遵守標準模式(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>

這兩個文檔相互共享一些結構性元素,但每個都有唯一性元素。在文檔內部的結構和正文及其他數據通常被稱為文檔的「內容」,並可以通過通過檢索或編輯方法(見下文)來引用。關係數據庫中,所有記錄包含同樣的字段,保留未使用字段為空;不同於關係數據庫,在上述例子的這兩個文檔(記錄)中都沒有空「字段」。這種方式允許向某些記錄增加新信息而不要求在數據庫中的所有其他記錄共享相同結構。

文檔數據典型的提供了關聯於文檔內容並與之一起存儲的額外的元數據。這種元數據還可以與增進數據存儲有關,提供組織文檔,提供安全性,或其他特定於實現的特性。

CRUD操作

面向文檔數據對文檔提供類似於其他數據庫的核心操作,儘管術語未完全標準化,大多數實踐者將它們認可為CRUD

  • 建立(或插入)
  • 檢索(或查詢、查找、讀取或尋找)
  • 更新(或編輯)
  • 刪除(或移除)

在數據庫的文檔通過代表這個文檔的唯一的「鍵」來尋址。鍵是一個簡單的標識符(簡寫為ID),典型的是字符串URI路徑。鍵可以用來從數據中檢索文檔。數據庫典型的在鍵上保有索引來加速文檔檢索,並且在某些情況下要求用鍵來把文檔建立或插入到數據庫中。

檢索

面向文檔數據的另一個定義特徵,使之超越可用來檢索文檔的簡單的鍵到文檔查找,就是數據庫提供允許用戶基於內容(或元數據)來檢索文檔的API或查詢語言。例如,你可能需要一個查詢,檢索特定字段被設置為特定值的所有文檔。可獲得的查詢API或查詢語言的特徵的集合,還有查詢的預期性能,在不同實現之間有顯著差異。類似的,可獲得的索引選項和配置的特有集合隨着不同實現而有着巨大差異。

文檔存儲和鍵-值存儲有很大差異。在理論上,在鍵-值存儲中值對於存儲是不透明的,它們本質上是黑箱子。它們可以提供類似於文檔存儲的的查找系統,但是對內容的組織有着更少的理解。文檔存儲使用在文檔中的元數據來分類內容,例如允許它們理解一個數字序列是電話號碼,而另一個是郵政編碼。這允許它們在這種類型的數據上進行查找,例如,包含555的所有電話號碼,但忽略郵編 55555。

編輯

文檔數據典型的提供某種機制來更新或編輯文檔的內容(或元數據),替換要麼允許在整個文檔上,要麼在文檔的個別結構片段上。

組織

文檔數據庫實現提供各種方式來組織文檔,包括如下概念:

  • 收集(Collection):成組的文檔,依賴於具體實現,文檔可以被強制存留在一個收集內部,也可以被允許存留在多個收集之內。
  • 標籤(Tag)和不可見元數據:在文檔內容之外的附加數據。
  • 目錄層級:組織成樹狀結構的成組文檔,典型的基於路徑或URI。

有時這些組織概念在它們是邏輯的還是物理的、(比如在磁盤上還是在內存中)、表示等方面有一些變化。

實現

更多信息 名稱, 發行商 ...

XML數據庫實現

大多數XML數據庫是面向文檔的數據庫。

注釋

參考文獻

延伸閱讀

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads