關於SQL、XML與NoSQL數據庫

說到數據庫,還得從文件的記錄說起。譚浩強在他的暢銷書《BASIC語言》中就描述過從順序文件或隨機文件讀取等長的(固定格式的)記錄。實際上,文件的記錄不必等長,即包含的字段可以不同,並且即使記錄不等長的文件也能支持非順序查找,如二分查找、或改進的按照平均記錄長度估計記錄位置的查找算法。下面的交易文件就是帶不等長記錄的文件的示例。

INVOICES 2001-7-15 20:00
  Total     643 $15870.25
  Hash      10983465087380918366508371136410
.
Invoice #1234500001 2001-07-15 9:20
  Customer  #X006-5432 Johnny Appleseed
  PhoneX    123-456-7890 [email protected]
  Address   Appleseed Inc., 109 Apple Ave., New York City, NY 10456
  Items 2 $61.28
    Item #CX015A(HP-Deskjet-1010)       $36.30 discount=-$5(new-customer)
        HP DeskJet 1010 Printer 
    Item #DF040Z(RCA-MP3-P3230)         $19.98
        RCA 4GB MP3 Player with Flipout USB and Display
    Shipping                            $10.00 UPS-normal
.
Invoice #1234500002 2001-07-15 9:45
  ... ...
.
Invoice #1234500003 2001-07-15 9:53
  ... ...
.
  ... ...

這樣的數據文件格式對於用戶很有價值。

1. 它是自然的直觀的交割用的記錄,比從數據庫中查出的結果更爲實在。例如,營業員每天向店主送交一份上述格式的交易文件,同時在賬簿上留下手寫的核對過的總額與簽名。
2. 文件包含店主最爲關心的、與賬目直接相關的記錄,而忽略了其他數據庫操作,如用戶更改個人信息的操作等。
3. 文本格式的文件更適於長期保存(例如刻錄在光盤上備查,注意光盤只讀、體積小、且能增量刻錄的特點)。數據庫廠商的數據文件格式(如Microsoft的mdb文件)說不定過幾年就因版本過時而無法用軟件讀取了。此外,標準的文本格式數據也不會受更換技術(如數據庫或其他軟件產品)的影響。
4. 靈活緊湊的文本格式更容易直接閱讀。
5. 店主在使用交易數據作商業決策時,實際上不必關心當天的(尚未上報的)交易記錄。因此,上述的報告文件格式已能滿足店主本身的數據需求,即店主自己使用的數據庫可以直接以上述報告文件爲源數據。

應當說明,這樣的記錄文件也必須有嚴格的數據格式定義,就像XML的DTD或Schema定義一樣,以確保有效性。(從標準XML文檔產生上述格式的文本文件的XSLT轉換可能可以用來定義schema。)同時也應看到,XML並不能滿足所有自動驗證的要求,如例中核對總數與總額。另外,用戶也可以選擇其他的記錄文件格式,如XML或Excel。前者有成熟的schema工具,後者則強調靈活的文檔佈局與可讀性。

前面已經提到,在記錄文件中根據順序編號快速檢索出某一Invoice記錄並不困難,但按照其他方式查詢(如根據顧客姓名)就需要另建索引文件。實際上,不難想像將Unix的標準grep(在文件中搜尋)命令擴展,以支持格式化的查找。並且,該命令可以利用手動或自動建立的索引提高查詢效率。下面的示例用到類似XPath的語法。

xgrep Invoice[Customer='Jonny Appleseed'] invoice.dat

實際上,XML的查詢比SQL查詢更有趣,這可以從HTML用到的CSS語法看出。當然,也不難想像用類似SQL的語法查詢一個文件、甚至查詢多個文件的JOIN。例如,從前面的Invoice文件可以(根據ItemId)建立將交易記錄按產品類型歸類的視圖。數據庫(數據分析)軟件則可以建立在這些查詢工具之上。XML數據庫與NoSql數據庫(如MongoDB)實現了類似的儲存與查詢功能,但它們大多強調獨特的儲存方式、查詢語法及海量處理能力,而不是使用已有的用戶數據文件。

另外,操作系統可以在以下幾方面支持上述文件格式及查詢。

1. 通過設置文件格式(類似DTD、XML Schema),操作系統可以支持在本地用二進制格式保存數據文件。這能壓縮文件大小並且提高查詢速度。僅當拷貝到其他目錄下時,文件才被還原爲文本格式。
2. 將結構化文檔映射(mount)爲目錄結構。這方便爲文件的子節點設置權限,例如禁止一個操作員查看某類產品的交易數據。另一方面,這也方便了在操作系統級別對文件節點的訪問作記錄(日誌)。目錄結構映射甚至可以用來支持查詢本身。
3. 操作系統應支持統一處理動態生成的文件(視圖),以便爲它們也提供目錄結構映射。(Unix中用cat(concatinate、“連接”)的命令名暗諷這一功能。)

發佈了28 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章