2009年6月28日 星期日

db4o 中的 Transparent Persistence

之前的文章提及,更新深度讓我們可以細緻化的控制物件的更新長度,以便在效能和便利上取得平衡,然而也造成下面的問題:
  • 設定特定更新深度:程式碼必須知道哪些物件對應的更新深度
  • 當更新深度為最大值時,會造成效能低落,沒用到的物件會被無意義的更新
一個解決方法也許是讓 db4o 引擎去幫你作決定。這個功能在 db4o 7.1 版時引入,稱之為「Transparent Persistence」(後文簡稱 TP)。db4o 藉由下面方式來支援 TP:
  1. 資料庫必須組態成 TransparentPersistenceSupport
  2. Persistent 類別必須實做 IActivatable 介面,該介面在 db4o 的 Activation一文中有介紹。該介面提供了 bind 方法取得 container 的 activator 物件。
  3. 當物件的欄位被修改時, db4o 的 Activation一文中提及的 Activate() 方法會被呼叫來儲存物件內容。而 db4o 的 Activation的程式碼中出現的 ActivationPurpose.Write 會在 TP 中被使用。
假設使用在 db4o 的 Activation一文中定義的 Article 物件,我們在開啟資料庫前,先設定好 TP 支援:
Db4oFactory.Configure().Add(new TransparentPersistenceSupport());
只要加上這行,再更新物件內容時,只要該物件欲更新的欄位有加上 ActivationPurpose.Write,則會被自動儲存。

db4o 的 Activation一文中提及的主要是取出物件時的情況,這裡是儲存物件的情況

沒有留言: