2010-03-08 106 views
6

在一個相當大的遺留項目中,我將幾個毛茸茸的模塊重構爲Moose類。這些模塊中的每一個都需要數據庫訪問(懶惰)獲取其屬性。由於這些對象的使用相當繁重,我想減少冗餘請求的數量,例如對於未更改的數據。如何正確減少使用mod_perl的冗餘請求數量?

現在,我該如何做到這一點?我有幾個選擇:

  1. 通過角色實現我的穆斯類緩存將它們存儲在memcached有5-10分鐘後(可能不是太困難,但棘手的懶屬性)更新: KiokuDB也許可以幫助這裏,不得不讀了關於屬性
  2. 遷移到DBIx::Class(需反正做),並在這個層面上實現緩存(DBIC可能會採取最痛苦的離開只是本身)
  3. 某種方式使我的對象堅持在mod_perl過程中(不知道如何做到這一點:()

你會如何做到這一點,你認爲什麼是一種理智的方式?緩存數據首選對象還是ORM級別?

回答

0

既然你已經要做DBIC了,那麼讓這個改變照顧它將是有意義的。將自己推出然後實現DBIC將會變得不太合理,因爲當您發現您正在使用DBIC但擁有本地緩存​​時,維護人員會暫停......「出於某種原因。」

不這樣做的唯一原因是(1)如果您現在真的需要這樣的性能,而且您沒有時間等待DBIC更改,因爲我想這將會是相當廣泛的。或者(2),如果你不確定你是否真的轉向DBIC。如果您還沒有調查過它,並且您正在執行大量自定義SQL而不是基本的CRUD,那麼最終的投資回報可能會很小。

1

#3的簡短答案是:不要使用'我的'。你可以這樣做:創建你這樣的處理程序中只將每個Apache子,如果你重新加載數據每隔5-10分鐘,這是罰款內部共享

use vars qw($object); 
# OR post perl5.6: 
# our ($object); 

# create your object if it doesn't already exist 
$object ||= create_object; 

# Maybe reload some attributes if they have expired. 
$object->check_expires; 

對象。任何只讀的模塊和對象都應該加載到PerlPostConfigRequire腳本中,以便它們將在所有子級中共享。