1

我开发了一个 GPS 应用程序,所有设备(在路上移动)每 30 秒将它们的坐标发送到服务器。现在我必须计算这些设备之间的距离,所以如果任何设备进入另一个设备的范围内,那么这两个设备都会收到通知。

我知道如何计算两个坐标之间的距离(感谢谷歌),但我不确定如何实现它;如果我们有 100 万台设备同时向服务器发送数据,那么服务器需要每 30 秒执行 100 万*(100 万 - 1)次距离计算。

请让我如何实现它。我是否需要使用 Hadoop 或 MySQL 数据库程序之类的东西来完成这项工作?计算在这里不是问题,但处理和计算这么多数据是一个问题。

4

1 回答 1

3

有一种称为QuadTree的数据结构。保持四叉树中的数据点更新,您将拥有一个小得多的数据集来比较这些值。

当客户端登录并移动并向您发送数据点时,您会更改它们在四叉树中的位置。现在,QuadTree 将拥有所有数据点的 2d 地图,分成桶。每个桶包含 4 个其他桶,其中可能有也可能没有点。当您试图找到给定数据点 X 内的每个人时,您会查看该点所在的桶中的所有点。然后查看桶中“围绕”该桶的所有点。(其中有 8 个。NSEW NW SW NE SE。)您继续前进,直到到桶的距离(以及其中的所有点)大于您的最小范围。

现在其他所有人,其中大多数人可能离得很远,都不需要接受测试。你永远看不到他们的水桶。

于 2012-10-17T13:45:46.560 回答