2011-11-24 47 views
0

我有一個'黑匣子'的應用程序,獲取值的地圖作爲參數,執行重和長(至多5s)的計算,並生成單個的Result可以保存在數據庫中。 我所知道的有關應用程序是:RDBMS作爲緩存,需要設計建議

  • 結果是相對於設置地圖AF唯一值
  • 參數是與字符串>字符串地圖與已知maximun長度兩者 鍵和值
  • 參數圖的長度是可變的(從2-3到1000個條目或 左右)
  • 可能的密鑰值的列表的大小是大約1000

個樣品參數是:

Map: {'k1'->'a', 'k2'->'b'} 
Map: {'k1'->'a', 'k2'->'b', ... 'k100'->'zzz'} 
Map: {'k1'->'x', 'k8'->'y'} 
Map: {'k6'->'z'} 

中的每一個上面會產生獨特Result對象。

現在想象另一種服務,它建立在緩慢的庫之上,需要每秒處理數十個計算請求。 如果不對已經計算的結果進行緩存,這是不可能的。我對可能的緩存大小總數的估計大約有100-500百萬條記錄,這導致我將RDBMS用作緩存存儲。

由於提供的映射唯一標識了結果,我可以通過鍵對參數映射進行排序,並將其連接到字符串'k1:a:k2:b ....'。這將definetely是緩存鍵,但:

  • 緩存關鍵將是巨大的,上面的按鍵大小限制了許多RDBMS和 需要索引CLOB的
  • 我將沒有使用的事實,關鍵值限制在 可能的值。

你的建議是什麼?性能是我的主要關注點。

+0

實際上兩張不同的地圖不可能產生相同的結果嗎? –

+0

@Catchall,不同地圖產生相同結果的情況是可能的,但不在問題的範圍之內。 – Osw

回答

2

實際上,這聽起來更像是一個key-value storedocument database最好解決的問題,而不是RDBMS。

另一個值得研究的可能性是緩存服務器,如memcached

+0

同意 - 這不是真正的關係數據。 –

+0

同意兩次,花了相當長的時間才明白我對RDBMS的偏見有多大,redis noSql做我想要的更快。謝謝。 – Osw

0

我給你的建議是計算500M * 5sec以天表示的時間。那就是計算您將要存儲在緩存中的所有結果所用的時間,也就是您在之前花費時間開始看到構建該緩存的實際益處。 (是的,我知道,你可以逐漸建立你的緩存,但是如果有很多可能的條目,那麼命中的概率與緩存大小本身成正比,即:幾乎沒有在啓動階段,需要一段時間才能達到合理的命中概率imho。)

+0

好點,這就是我忘了提及。是的,「逐漸」是我真正期待的。我也預計99%的請求將被緩存記錄的不到1-2%處理。 – Osw