2012-04-26 141 views
0

我正在實施一個使用GPS車輛的監控系統,而我的BIG PROBLEMNB就是這樣,我每秒有100k個數據(GPS數據)並行處理。數據是從許多GPS信息(GPSID,緯度,經度,時間),100k數據發送的,具有相同格式的第二個,我應該處理它(以某種方式處理它(?))顯示視覺系統中每個gps的路線。並行大數據處理

我的大問題是:

,我可以「吃」這個大量的數據被每秒發送?並在那之後以最有效的方式處理它們以顯示每個GPS-id的旅行信息

也許分組的過程?爲每個GPS-ID?我沒有真正清楚的事情,任何其他的想法或功能將會有所幫助。

我想知道如何處理這些應用程序使用的信息的一些想法,算法?分成幾臺電腦(怎麼樣?)? ...

最有可能的解決方案,涉及架構和算法,即時通訊工作與Java。

我一直在閱讀關於hadoop和地圖/減少,我不知道我是否可以服務。

我只是覺得:https://github.com/nathanmarz/storm

任何想法表示讚賞

信息廣告:GPS信息由腳本創建的,我必須看到什麼是最好的方式來接收這些信息,或許如果我可以跳過一塊信息,因爲1秒的座標丟失數據塊認爲不會影響顯示,並給我更多時間來處理數據,是可能性,顯然損失的信息要少得多好多

+4

這是太少的信息。如何將不同的數據放在一起,你稱之爲「過程」,你需要怎樣處理它們...... – 2012-04-26 12:41:56

+0

只是迴應@coffee_machine所說的話:有太多的信息來給出有意義的建議。 – NPE 2012-04-26 12:42:53

+0

@Jesus L.描述你的流程,也許有人會給你更多有用的建議。 – ant 2012-04-26 12:52:59

回答

0

一個簡單的方法是保持接受來自客戶端的數據並創建異步請求處理數據。如果處理開始時您知道結果將花費太長時間,則會跳過該項目並處理下一個項目。您可以考慮使用併發隊列(未在下面的示例代碼中顯示)來確保項目按照提交給執行程序服務的順序進行處理。

public static void main(String[] args) { 
     final ExecutorService executorService = ... 

     final long computationTime = 800; // say it tasks 800ms to process the data 
     while (someCondition) { 
      // receive gpsData from client 
      executorService.submit(new ProcessingTask(computationTime, gpsData)); 
     } 
    } 

public class ProcessingTask implements Runnable { 

    // want response inside a second 
    private final long responseTime = System.currentTimeMillis() + 1000; 
    private final long expectedComputationTime; 
    private final Object gpsData; 

    public ProcessingTask(long expectedComputationTime, Object gpsData) { 
     this.expectedComputationTime = expectedComputationTime; 
     this.gpsData = gpsData; 
    } 


    @Override 
    public void run() { 

     final long currentTime = System.currentTimeMillis(); 
     if (currentTime > responseTime + expectedComputationTime) { 
      // the result will be available too late, skip processing this item 
      return; 
     } 
     // TODO process gpsData 
     // TODO send response to client 
    } 

}