我开发了一个GPS应用程序,其中所有设备(在路上移动)每隔30秒将其坐标发送到服务器。现在我必须计算这些设备之间的距离,这样如果任何设备进入另一个设备的范围,那么两个设备都会收到通知。
我知道如何计算两个坐标之间的距离(感谢Google),但我不知道如何实现它;如果我们有100万台设备同时向服务器发送数据,则服务器需要每30秒执行100万*(1百万-1)次距离计算。
请告诉我如何实施它。我是否需要使用Hadoop或MySQL数据库程序来完成这项工作?计算在这里不是问题,但处理和计算这么多数据是一个问题。
答案 0 :(得分:3)
有一个名为QuadTree的数据结构。保持数据点在四叉树中更新,您将拥有一个小得多的数据集来比较值。
当客户登录并移动并向您发送数据点时,您可以在四叉树中更改它们的位置。现在,QuadTree将拥有所有数据点的2d映射,分成桶。每个桶包含4个其他桶,可能有也可能没有点。当您尝试查找给定数据点的X内的所有人时,您会查看该点所在的存储桶中的所有点。然后,您可以查看该存储桶周围的所有点。 (其中有8个.N S E W NW SW NE SE。)你一直走到水桶的距离(因此它们中的所有点)都大于你的最小范围。
现在其他所有人,其中大多数可能都很远,不需要进行测试。你永远不会看到他们的桶。