我正在实施一个使用GPS车辆的监控系统,我的BIG PROBLEMNB就是这个,我每秒有100k数据(GPS数据)并行处理。
数据是从许多GPS信息(GPSID,纬度,经度,时间),100k数据发送的,第二种格式相同,我应该处理这些信息(以某种方式处理它(?))来显示视觉系统中每个gps的路由。
我的大问题是:
我可以“接受”每秒发送的大量数据吗?然后以最有效的方式处理它们以显示每个GPS-id的旅行信息
也许是分组的过程?每个GPS-id?我还没有真正清楚的事情,任何其他想法或功能都会有所帮助。
我想知道如何处理应用程序使用的这么多信息的一些想法?,算法?分成几台电脑(怎么样?)? ...
最可能的解决方案,涉及架构和算法,我正在使用java。
我一直在阅读有关hadoop和map / reduce的内容,我不知道我是否能够服务。
我刚发现它:https://github.com/nathanmarz/storm
任何想法都表示赞赏
信息广告:GPS信息是由脚本创建的,我必须看到接收此类信息的最佳方式,可能是因为我可以跳过一段信息,因为1秒钟丢失的坐标数据块认为不会影响显示并且给了我更多时间处理数据,是可能性,显然丢失的信息越少越好
答案 0 :(得分: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
}
}