2012-04-26 102 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 
    } 

}