架構概述
Freebase.com是由Metaweb開(kāi)發(fā)的語(yǔ)義數據庫,其架構核心是Metaweb數據庫。此數據庫是以節點(diǎn)和節點(diǎn)間的關(guān)系的圖狀結構來(lái)組織數據,它和傳統的關(guān)系數據庫以表的方式組織數據完全不同。
Metaweb服務(wù)器與圖結構數據庫緊密綁定,通過(guò)二進(jìn)制數據存儲塊(類(lèi)似SQL中的BLOBs)來(lái)儲存圖節點(diǎn)和節點(diǎn)關(guān)系,并以哈希表的方式存儲組織數據,它在用戶(hù)下載上傳數據時(shí)的起到臨時(shí)數據緩存器的作用,對數據進(jìn)行檢驗處理后,再保存到Metaweb數據庫中。Freebase通過(guò)訪(fǎng)問(wèn)控制模塊來(lái)規范各用戶(hù)組的行為。所有用戶(hù)通過(guò)Portal程序來(lái)讀取數據庫中的數據。
Metaweb數據庫
Metaweb數據庫的圖結構是由一系列的節點(diǎn)和反映節點(diǎn)間關(guān)系的有向連線(xiàn)組成。圖中每個(gè)節點(diǎn)都記錄與自己相關(guān)的信息。數據庫中的所有相關(guān)數據都以記錄節點(diǎn)間關(guān)系的方式組織數據進(jìn)行存儲。
Metaweb數據庫中,以數組的方式對節點(diǎn)及其關(guān)系的元數據進(jìn)行建模,以表格的形式進(jìn)行存儲,表格中的每條數據對應一個(gè)節點(diǎn)關(guān)系數組。節點(diǎn)關(guān)系數組一般由4個(gè)主要的數組成員組成,分別是源節點(diǎn),屬性(節點(diǎn)間關(guān)系),目標節點(diǎn),源節點(diǎn)值,于是節點(diǎn)關(guān)系表中就按這四個(gè)成員設定相應的四列。
Ø
屬性以及其特點(diǎn)
Metaweb一個(gè)重要的概念就是“屬性”,屬性就是節點(diǎn)間的關(guān)系。Metaweb一個(gè)重要的特性就是系統不會(huì )以已經(jīng)存在的節點(diǎn)關(guān)系對新關(guān)系進(jìn)行預先定義。新的屬性表示一種新的關(guān)系,可以被任何用戶(hù)在任何時(shí)間定義。這也就是說(shuō),在圖中,屬性也可以是節點(diǎn)。當屬性為一節點(diǎn)時(shí),它將保存在數組表中的“源節點(diǎn)”列中,并且與自身產(chǎn)生關(guān)系。
在Metaweb數據庫中,節點(diǎn)的屬性通常不是唯一的,即節點(diǎn)間的關(guān)系不是唯一的。但是可以通過(guò)“/type/property/unique”屬性進(jìn)行設置。一組以相同關(guān)系指向到同一個(gè)特定節點(diǎn)的節點(diǎn)群可以認為是一組值的無(wú)序設定。
Ø
基礎屬性
Metaweb中定義一些必要屬性做為Metaweb架構中最基礎的部分,這些屬性是Freebase運行的基礎。如“/type/object/name”屬性支持節點(diǎn)可以定義可讀性強的名稱(chēng)。前面談到的“/type/property/unique”屬性也是一個(gè)。實(shí)際上,這類(lèi)屬性為其他用戶(hù)定義的屬性規定它們的基本的行為,并且Metaweb的行為也依據這類(lèi)屬性的值。如果一個(gè)屬性的名稱(chēng)以“/type”開(kāi)頭,那么它就是一個(gè)具有架構層面上的重要屬性。如下圖所示。
+--/type/id
+--/type/int
+--/type/float
+--/type/boolean
+--Value Types--+--/type/text
+--/type/rawstring
+--/restaurant domain
+--/type/uri
+--/location domain
+--/type/datetime
+--/film domain +-/music/track
Types-+ +--/type/key
+--/music domain--+-/music/album
+--Freebase Types-----+--/book domain +-/music/artist
+--etc.
+--Object Types-+--Core Types (/type domain)
+--Common Types (/common domain)
+--User-defined types-+--/user/joe/default_domain
+--/user/joe/music
圖2 Metaweb 屬性目錄
Ø
數據庫檢索原理
Metaweb圖為有向圖:圖中節點(diǎn)關(guān)系的方向都是從源節點(diǎn)指向目標節點(diǎn)。雖然節點(diǎn)間的連線(xiàn)是有向的,當執行數據庫查詢(xún)時(shí),Metaweb可以向前和向后遍歷所有有向連線(xiàn)來(lái)獲取相匹配的結果。因為Metaweb會(huì )按不同方向遍歷連線(xiàn),這樣也可以將節點(diǎn)間連線(xiàn)看作具有“雙向性”,于是,在屬性的定義時(shí),也會(huì )呈現“雙向性”。但是需要將一個(gè)方向上的屬性定義為“主屬性”,反向上定義為“扭轉屬性”,而這兩個(gè)屬性也稱(chēng)為“互惠屬性”。Metaweb數據庫節點(diǎn)關(guān)系表中,可以通過(guò)“/type/property/reverse_property”屬性標注主屬性和扭轉屬性,從而實(shí)現關(guān)系的雙向遍歷。
具體而言就是,當用戶(hù)輸入他的問(wèn)題時(shí),Metaweb的數據庫引擎就會(huì )分析用戶(hù)輸入問(wèn)題,并得到問(wèn)題的主體和可能所處的領(lǐng)域,在“源節點(diǎn)”列和主屬性“屬性”列中進(jìn)行檢索,然后會(huì )將所有相匹配的“目標節點(diǎn)”列中的值報告給用戶(hù)。也會(huì )反向在“目標節點(diǎn)”列和扭轉屬性“屬性”列中檢索,也將所有相匹配的“源節點(diǎn)”列中的值報告給用戶(hù),這樣可以將所有用戶(hù)想知道的信息呈現給用戶(hù)。
訪(fǎng)問(wèn)權限控制
Metaweb是對任何用戶(hù)完全開(kāi)放的。任何人都可以鏈接到Freebase.com上讀取數據。但是用戶(hù)需要添加編輯數據時(shí),就需要訪(fǎng)問(wèn)控制模塊。Metaweb通過(guò)“/type/user”,“/type/usergroup”,以及“/type/permission”這幾個(gè)屬性實(shí)現用戶(hù)的訪(fǎng)問(wèn)權限控制。訪(fǎng)問(wèn)控制模型也很簡(jiǎn)單,就是在每個(gè)對象都有一個(gè)“權限”屬性,并且指向“/type/permission”屬性。這個(gè)權限屬性就是指定了用戶(hù)組,不同用戶(hù)組成員可以操作的對象就不同。這個(gè)簡(jiǎn)單的訪(fǎng)問(wèn)控制模型默認是完全開(kāi)放的,因為Freebase.com任何用戶(hù)可以自由添加編輯絕大部分的Freebase.com對象。但是上節中涉及到的規范Metaweb架構基礎行為的type屬性是不能容許普通用戶(hù)進(jìn)行編輯添加的,這也保證了Freebase.com的正常運行。
小結
從以上對Metabase數據庫的結構以及檢索原理的闡述中,可以看到Metabase設計的這款語(yǔ)義數據庫的理念十分先進(jìn),與目前流行的企業(yè)級關(guān)系數據庫在組織和存儲數據等方面完全不同。這種以圖結構方式組織管理數據的模式,也許可能成為新一代語(yǔ)義數據庫設計的標準。本文是從目前Metabase已公布的技術(shù)文檔,以及其他相關(guān)技術(shù)評論中,吸收總結出Freebase.com這個(gè)世界最大語(yǔ)義數據庫的實(shí)現原理,但是由于具體的技術(shù)細節資料的缺乏,還無(wú)法完整的全面的給出其實(shí)現的各個(gè)細節。但隨著(zhù)Metabae對其技術(shù)細節的進(jìn)一步公開(kāi),以及業(yè)界對語(yǔ)義數據庫技術(shù)的不斷研究,這將使我們有機會(huì )能更加深入清晰的理解語(yǔ)義數據庫的“廬山真面目”。