建立對像數據庫-內存映射範式,需要中間層容器的支持

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- 建立對像數據庫-內存映射範式,需要中間層容器的支持 (http://www.webasp.net/article/18/17841.htm)
-- 作者:未知
-- 發佈日期: 2005-04-22

在<設想使用XML和關係數據庫形成一個對像數據庫>一文中,已經闡述了關係數據庫和對像數據庫的主要區別:對外鍵的使用是通過直接記錄,還是遍歷外鍵子表來獲得。而這裡,是面對另一個重要的區別:如何釋放對象的資源。對於對像數據庫而言,它等同於是一批直接存於數據庫中的串行化對象,它的實際存儲形式到底是不是按關係結構存儲並不是最重要的,重要的是調用程序讀入內存的就是一個對象,而不是游標映射;這樣,使用對像數據庫就必須存在著一個如何清除用完的對象資源的問題;同時由於對像數據庫必然是與語言無關的,因此對像釋放也就必然只能由程序調用方完成。

       XML可以看作是一個串行化的可以在不同的語言和平台間交換的對象結構,它實際上也存在同樣的需要:假如不是把XML簡單看作是HTML那樣的presentation layer的樣式,而是對像存儲的形式,那麼讀入XML對像後也必然存在著重載和維護的問題,而且,要令程序高效,就必須是由程序容器完成,而不應由bean來維護。否則減少程序量提供軟件質量就無從談起了。通過程序容器產生下個共用線程,對已經不再使用的對象清空,空出資源。實際上,J2EE的實體Bean容器就是這樣一種容器,只不過,它是通過OR映射的形式,希望反映出數據庫中複雜的對象實體關係。對像數據庫可以令這種映射簡化到基本上是單表的形式,如果它能像J2EE一樣一定程度上維護內存對象,最重要的就是清空內存佔用,就可以達到比實體Bean更佳的效果。

      J2EE實體bean基本上是扁平的對象關係,實體bean之間不存在互相包融的關係,這令它並不能很方便地反映到實際應用的關係中。而現實使用中,對像結構更接近於是一個繼承樹式的關係。在這種結構中,沒有必要對所有對象都由容器處理它的清除。換言之,並不需要對所有對象進行清除,上級對像本身就是下級對象的容器,只需要對上級(頂級)對像清除就可以達到目的,對於JAVA來說,JVM垃圾處理器會把沒有頂級調用的類一整個清除掉。
      
      對於結合了XML和數據庫的對象系統,對對象的調用過程是:容器初始化頂級對像->初始化次級對象的句柄->在需要調用次級對像詳細內容時完全載入這一對像->(清除次級對像)->在不需要使用時清除頂級對像和剩餘的所有次級對象。

容器的另一個任務就是維護句柄記錄和實際數據關係結構的一致性。在上述流程中,由於詳細的內容是放在數據庫中,上級對像中僅保留下級的句柄。歷此,這等同於是對一個結構化數據的非規範化記錄。從這點出發,當出現不一致的衝突時,肯定是應該以關係數據庫中的記錄為準的。比較理想的方式是對像實現若干容器管理的接口,由容器負責對對象的一致進行維護。在這裡,對應中間層的對象實際上是數據庫中的串行化對象的內存映射。因此,要真正令XML+關係數據庫形成的對象結構運轉得有效率,就必須有高效合理的管理容器,集中完成高度一致的重複的對象維護工作,而令上層應用可以專注於具體的應用邏輯。

歸納起來,使用對像數據庫的程序範式的話,那麼需要有這樣的容器:它能自動完成對內存對像中的清理工作;能夠自動完成與數據庫的一致性操作。另外,對於形式相似的對象類程序,可以提供一些自動化的工具完成大部分的編碼,或者,提高可以繼承的抽像類完成重複性的基本一致的維護方法。具體如何實施,通用性有多高,將在SectionBase的修改中一一加以處理。目前呢,先以BMP的形式編碼,估計完成後,就可以進一步的通用的方法可以抽像出來。


webasp.net