问题:
我有数以百万计的标记(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和lags = true”的所有标记。仅对于这个查询,就需要创建一个全新的集群树。如果他更改了查询“请告诉我所有标记,它们的区域> 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 ?整个想法是处理大量的数据和预先计算,这样用户就可以通过在他的端或服务器端计算它来操作它(因此客户端集群不是一个解决方案,融合表也是一个解决方案)。
代码示例非常受欢迎。
发布于 2012-07-31 10:37:54
Hadoop适合于预处理,而不是在线(“实时”)操作。
希尔伯特曲线和k-d树比普通的网格文件/四叉树更复杂,实际上对你也没有多大用处。优化树,以完全匹配您的可视化缩放水平!然后,您可以在不进行任何“集群”的情况下逃走,但只需可视化适当的四叉树单元。
毕竟,您的空间数据只有2d,所以所有的2d方法都能正常工作。你很清楚这个值的范围,因为地球不会改变大小。这就是谷歌地图如此快速的原因:它们使用固定的块,它们可以缓存、高效地服务和预生成。
考虑到您可能不需要ACID和事务以及这些高级特性,使用一个被炒作的NoSQL数据库似乎是合理的。
https://stackoverflow.com/questions/11737227
复制相似问题