2012-06-04 45 views
0

我需要實現一個磁盤備份隊列,它可以接受來自多個線程的實時分析數據,然後將數據上傳到潛在的錯誤傳輸中。最初針對Java,但長期來看,我們需要在Objective-C,Flash,JavaScript中使用相同的機制。針對android的Java和桌面。便攜式持久性隊列 - >上傳者

這將包含在一個單獨的進程中,所以MQ解決方案可能已經結束。性能是一個重要的考慮點,這意味着我們會交易一些可靠的性能。

Architecture Diagram

我很好奇兩件事情:

  1. 鑑於上述架構,有沒有會完全或部分地解決這個問題的任何可用的技術?
  2. 考慮到最終在不同平臺上重新實現或理想地重新使用這種機制的目標,有沒有什麼方法可以在Objective-C & Android Java中輕鬆使用的方式來構建?
  3. 這個建築看起來如何?

回答

0

如果您想保留有限的數據量(循環日誌),並且能夠爲其保留固定數量的持久性內存,那麼最有效的解決方案是memory-mapped buffers。 Persister僅僅是一些緩衝區的緩存,服務於分析隊列和上傳器。

在其他平臺上重新實現時,平臺可能沒有映射工具。在這種情況下,可以直接讀取和寫入緩衝區。這可能比映射到內存效率低,但仍然不低於其他解決方案(例如嵌入式數據庫)的效率。

至於架構,圖片並不反映從持久存儲器讀取數據(或者需要持續存儲器需要什麼?)的情況。然後,分析隊列實際上包含整個數據(包括持久性),並且稱爲分析隊列的是主內存中的緩衝區,它們可能不是連續的,所以緩衝區緩存比隊列更好。

+0

這是一個很好的觀點。我故意忽略這個,但也許我應該澄清。我打算在啓動時讀取persister以獲取任何已保存但未上傳的事件。 非常真棒我不知道android支持這個,但它確實 - http://developer.android.com/reference/java/nio/MappedByteBuffer.html – amirpc