a****i 发帖数: 1182 | 1 怎么在一个分布系统保存和读取geohash
比如说有个event在 wx4g0ec1,显然它也在w, wx, wx4...里
具体实现的时候,每一级geohash都会指向这个event,w -> "wx4g0ec1"
wx -> "wx4g0ec1" ...
还是说上一级只需要指向下一级就可以? w -> wx -> wx4 ... -> "wx4g0ec1"
在读取的时候又怎么做呢?比如说读最新的十个event,在某个location范围
zoom in/out | d****n 发帖数: 12461 | 2 我猜是直接指向。要不然怎么做统计,例如统计wx4下面的全部事件?
【在 a****i 的大作中提到】 : 怎么在一个分布系统保存和读取geohash : 比如说有个event在 wx4g0ec1,显然它也在w, wx, wx4...里 : 具体实现的时候,每一级geohash都会指向这个event,w -> "wx4g0ec1" : wx -> "wx4g0ec1" ... : 还是说上一级只需要指向下一级就可以? w -> wx -> wx4 ... -> "wx4g0ec1" : 在读取的时候又怎么做呢?比如说读最新的十个event,在某个location范围 : zoom in/out
| F****n 发帖数: 3271 | 3 geohash是给没有spatial data structure的检索系统用的
比如说你只能用一个全文本的搜索引擎,geohash可以用来mimic spatial indexing
你可以把event wx4g0ec1 用所有的prefixes(w, wx, wx4...)索引
这样对任何一级的搜索都能找到
但是如果你自己build一个搜索系统,没有必要用geohash
geohash就是一个很蹩脚的quadtree(essentially a trie), 并不efficient,
应该直接上spatial data structure.
一般来说r-tree is the best.
【在 a****i 的大作中提到】 : 怎么在一个分布系统保存和读取geohash : 比如说有个event在 wx4g0ec1,显然它也在w, wx, wx4...里 : 具体实现的时候,每一级geohash都会指向这个event,w -> "wx4g0ec1" : wx -> "wx4g0ec1" ... : 还是说上一级只需要指向下一级就可以? w -> wx -> wx4 ... -> "wx4g0ec1" : 在读取的时候又怎么做呢?比如说读最新的十个event,在某个location范围 : zoom in/out
| N*****m 发帖数: 42603 | 4 有一个好处,是比较适合KV-store。比如,redis natively支持。
【在 F****n 的大作中提到】 : geohash是给没有spatial data structure的检索系统用的 : 比如说你只能用一个全文本的搜索引擎,geohash可以用来mimic spatial indexing : 你可以把event wx4g0ec1 用所有的prefixes(w, wx, wx4...)索引 : 这样对任何一级的搜索都能找到 : 但是如果你自己build一个搜索系统,没有必要用geohash : geohash就是一个很蹩脚的quadtree(essentially a trie), 并不efficient, : 应该直接上spatial data structure. : 一般来说r-tree is the best.
| F****n 发帖数: 3271 | 5 就是给lookup table型的索引用的
类似trick一维也有, lookup table不支持range query (e.g., b-tree)
但可以把数据转成整数然后encode成trie, 然后index所有prefixes
Lucene的range query基本上就是这么实现的
【在 N*****m 的大作中提到】 : 有一个好处,是比较适合KV-store。比如,redis natively支持。
|
|