運行一個C#.net應用程序,每隔30秒從100個客戶端接收數據,然後將數據存儲在數據庫中。數據是針對每個客戶端的兩個參數。我需要爲每個客戶每小時確定每個參數的總和,並根據結果做出決定。決策算法將以滑動窗口的方式爲最後一小時的數據做出決定。我最初的想法是保留100個客戶端的字典,其中關鍵是客戶端IP,價值是一個總計。但是1)如果我的應用程序在半小時或59分鐘的時候重新開始,我就失去了所有這些溫暖的運行總數。 2)如果更多的客戶端開始發送數據,字典將消耗更多的內存,3)如果將來2個參數變爲100,字典增長更大4)使運行總值總是反映一小時的最近數據值不是直截了當。從傳入流計算隨時間變化的值的最佳方法
我應該考慮哪些不同的方法?最佳實踐?設計模式?
這是非常廣闊的,但這裏有我的兩分錢:1店在數據庫中的數據,2 *鍵值爲客戶端IP *非常糟糕的主意,兩個不同的客戶端可以具有相同的外部IP(流量通過代理, nat,其他)。 2,在客戶端生成GUID並將其存儲在客戶端上,然後當客戶端連接發送ID,這樣你會毫不含糊地identfy每個客戶端,甚至可以有多個用戶在同一臺機器上。 – Gusman
謝謝。 IP是一個壞主意,我同意。我將使用GUID。對於數據庫存儲,我將在傳入數據到達時進行存儲。決策邏輯在存儲之前在數據上運行。還是你的意思是,存儲它,然後決定邏輯定期工作的數據庫?我試圖避免這種情況,因爲它可能無法在數據庫讀取和常量寫入方面表現良好。 – sOltan
是的,我打算在存儲的數據上間隔運行它。關於性能,你說你將有100個客戶端,你希望每個客戶端創建多少個寄存器?任何實際的數據庫都將工作得足夠快,以支持每秒數千次寫入,因此根據事務量可能足夠快或不足。 – Gusman