在關系數據庫中存儲大量XML文檔會導致很多問題。解決這些問題的首要步驟是深刻理解XML文檔中的參數。然后正確設計合適的解決方法。解決方法可以包括:一系列的結構表將XML文檔分割為小塊,或者直接捆綁到數據庫中的BLOB域。
大量文檔的潛在問題
當在關系數據庫中保存XML文檔,尤其是保存大量的XML文檔時,由于采用方法的原因,可能會產生很多問題。
有什么可能使得一個XML文檔變得非常巨大呢?經過測試發現,一個XML文檔變得很大的跡象是文檔不能正常啟動。這可能是因為以下潛在問題造成的。
首先是原始空間(raw space)的問題。出現的問題與XML文檔的使用頻率和存放空間相關,并不是因為文檔大于通常情況下的狀態,而是由于頻繁地使用它們造成的問題。使用者必須有一個適當大小的數據分區或數據庫來存放這些文檔。
在關系數據庫中保存大量XML文檔的解決辦法
其次,運行數據庫可能會產生錯誤。有時候XML文檔會分成多個部分,存放在代表XML文檔結構的不連續的表中。但通常情況下,XML文檔存放在BLOB域、文本域或者VARCHAR域中。
除了在數據庫設計上的缺欠之外,使用者還有可能碰到與數據庫通信的界面方面的問題。例如,絕大多數SQL執行都限制數據為4096字節――這就意味著,當使用SQL向數據庫發送10KB文檔的時候,該文檔將會遇到問題。在數據庫存儲程序中也存在類似的限制。如果沒有意識到這些限制以及文檔是否超出范圍的,使用者在使用過程中難免會碰到這些問題。
數據庫設計
開發人員和數據庫管理人員必須清楚地理解XML文檔中將要產生的操作,這樣才有可能正確地設計數據庫。理解將如何使用數據庫也同樣是相當重要的。
如果以整塊方式存儲整個文檔,這時有多種選擇。對于非連續數據,使用者應該設計出代表XML結構的表,并將數據分開存放到獨立的表中。將數據分開存放的優點是在于可索引性和可查詢性,以后進行查詢操作時不需要再對整個文檔進行操作。
BLOB(Binary Large Objects,大型二進制對象)域被用于存儲大型的二進制格式的數據。例如,加密文件通常都用于BLOB域。BLOB域非常適合存放XML文件。不過,BLOB域不具備可索引性和可查詢性,而且它不能通過標準的SQL與BLOB交換大量的數據。
兩種解決方法
一個解決SQL限制的方法是將XML文檔分割成為4KB或更小的塊,這些小塊再存放在表中,然后使用ID域將這些小塊聯系起來。
在存儲這些文檔時,使用者應該將它們分割成為小塊并存放在表中。當返回文檔時,使用者通過特定的ID選擇所有的塊,然后以合適的順序對它們進行集合。雖然比較麻煩,但這一方法對于多數據庫非常有用。
使用BLOB域可以在不分割的情況下存放大量XML文檔,但是BLOB域的問題在于不能使用SQL存儲和獲得數據。近年來,數據庫廠商都有了自己的存儲和獲得大型對象的方法。
為了在一個BLOB域中存儲大量的XML文檔,使用者必須使用捆綁(binding)。捆綁是將程序代碼中的數據與數據庫中的域相互聯系的過程。使用這一方法后,當改變數據庫的時候,會有可能影響數據庫的其他功能。
文章來源于領測軟件測試網 http://www.kjueaiud.com/