1

问题:

我有数百万(10+)个标记,每个标记都有不同的字段:

 1. lat 
 2. lng   
 3. area (double)
 4. size (int)
 5. tolerance (double)
 6. lags (boolean)
 7. channel (boolean)
... (more)

现在,我希望每个集群都有以下聚合数据:

 1. number of markers
 2. min area
 3. max area
 4. avg area
 5. min size
 6. max size
 7. avg size
 8. tolerance distribution (how many where of tolerance < X, other >=X < Y and >=Y <Z where X,Y,Z constants)
 ... (more)

集群是基于标记的 lat,lng(距离)和缩放级别(int)创建的。

非问题部分(**):

计算所有缩放级别的集群,而不考虑“全押”条件。这是通过创建一棵树来完成的,并且为用户获取集群是直截了当的。

现在解决问题:

用户可以根据标记字段进行查询,例如“向我显示其区域> K 且滞后=真的所有标记”。仅对于这个查询,就需要创建一个全新的集群树。如果他更改查询“向我显示其区域 > K.0001 和 lags=true 的所有标记”,则必须创建新树。我不想为每个用户的查询计算这样的树,也不想将它存储在内存中(不确定是否可能)。

问题:

What approach should be taken?
given the complexity of calculation X # of markers 
(fields inside) X speed factor. 
I was thinking that there's some sort of way to use  the 
"all-in" clusters calculation(**), as it gives me ALL the markers and clusters and from 
there to manipulate in some elegant way.

将要:

 - space-filling-curve (hilbert) can help? how?  
 - DB approach (what DBand why?)
 - k-d tree ?

整个想法是预先处理大量数据和计算,以便用户可以操作它而无需在他的一侧或服务器端计算它(因此客户端集群不是解决方案,融合表也是如此)

代码示例非常受欢迎。

4

1 回答 1

0

Hadoop 适合预处理,而不适合在线(“实时”)操作。

希尔伯特曲线和 kd 树比常规的网格文件/四叉树更复杂,实际上对您的用处更少。优化树以完全匹配您的可视化缩放级别!然后你可能根本不做任何“聚类”就离开了,而只是可视化适当的四叉树单元。

毕竟,您的空间数据只有 2d,所以所有 2d 方法都可以正常工作。而且您非常了解值范围,因为地球不会改变大小。这就是谷歌地图如此之快的原因:他们使用可以缓存、高效服务和预生成的固定图块。

鉴于您可能不需要 ACID 和事务以及这些高级功能,使用其中一种大肆宣传的 NoSQL 数据库似乎是合理的。

于 2012-07-31T10:37:54.220 回答