2011-11-30 50 views
0

我有一個函數將傳遞一個包含MANY變量的對象。這些變量都存儲在數據庫中。稍後,一個新的對象將被傳遞給我的函數,大部分時間它將會是相同的。但有時一兩個變量會有所不同,我將不得不根據這些變化採取各種行動。除了遍歷每個變量並將其與該變量的每個存儲版本進行比較之外,我該如何做到這一點?我可以如何爲整個對象生成散列值?因爲如果傳遞給我的時間對象將是最相同的,這將是確定沒有任何變化的快速方法。比較對象變量並查找變化的最佳方法

+0

您是否正在實施自己的ORM?如果不是這樣,你可以在開源ORM的源代碼中找到答案。 –

回答

0

你寫過你將所有變量存儲在數據庫中,所以我認爲你應該儘可能少地調用數據庫。爲此,您可以編寫一個存儲過程,該行在將一行插入保存值的表中時調用。在此過程中,您可以計算散列值並更新表中添加的用於存儲散列值的列。您可以使用Oracle中的sys.dbms_crypto.hash函數來計算散列值。如果需要搜索某個對象,請再次調用一個存儲過程,該過程輸入當前對象值的文本值,再次使用相同函數創建散列值並調用select語句,如果某行返回,則返回「 Y「,否則爲」N「。您可以將索引添加到「哈希值列」以使事情變得更快。

0

您可能會消耗盡可能多的資源,試圖確定是否有任何變化。除非您每小時收到數十萬條請求,否則每次更新數據庫時都可能很容易。