2011-09-02 28 views
1

幾乎每個商業應用程序都需要數據庫來存儲數據和在該數據上完成的事務。事務通常需要幾毫秒的時間。同時,在交易應用程序中,一件完全不可接受的事情是「延遲」。那麼,在這種需要延遲上限的應用中做出什麼樣的權衡呢?交易應用程序權衡:數據庫和低延遲

例如,客戶已經進行了交易,它必須通過一些檢查,這些檢查存儲在數據庫中,需要數據庫提取。然後,交易應轉交給OMS/ORS或交易所。而且,在每一層,都需要在數據庫中存儲某種交易數據。應該如何在事務持久性和低延遲之間保持平衡?

回答

2

兩件事情:

  • 緩存:緩存在您的應用程序的規則,這樣你就不用打數據庫爲每一個貿易
  • 線程:將存儲在交易數據的代碼數據庫到另一個線程。像這樣,您可以立即將交易路由到交易所,並將數據庫中的數據與其平行安全。
+0

這些是相當不錯的想法。但是,您是否有任何關於如何實施緩存方案的指示? – Lazylabs

+2

這在很大程度上取決於你如何訪問數據庫和一般的架構。 –

0

現在有一天人們使用內存中的交易系統,所以你減少了數據庫獲得的網絡延遲。

這裏有一些東西,你可以考慮爲低延遲

  • 爲了實現在Java低延遲你必須採取GC在java中的控制,有很多方法可以做到這一點的比如預先分配對象(即使用輕量級設計模式),使用原始對象 - 特洛伊是非常好的,所有的數據結構都是基於原始的,重用對象實例用於例如創建系統級字典以減少創建新對象,當從流中讀取數據時非常好的選項/ socket/db

- 試圖減少爭用使用等待算法(whi ch有點困難),鎖定自由算法。你可以找到很多的例子

- 使用內存計算。內存很便宜,你可以在內存中有四字節的數據。

- 使用機械同情 - 請參閱lmax干擾器,優秀的框架