我正在考虑处理大量数据的概念证明,例如> 10 G,这需要每秒至少200次写入和每秒大约50次以上的空间相关数据读取.这也是一个不断发展的系统.目前我正在考虑出于性能原因将这个大容量数据转移到NoSql大表类数据库中.
我已经考虑并仔细研究了MongoDB和cassandra.就我的阅读而言,
Mongodb: - 似乎有一个编写器锁定问题 - 如果不需要多个服务器,stackoverflow中的一个帖子建议使用此数据库 - 索引保留在内存中.因此,指数增长越大,性能就越差 - Mongodb直接支持空间数据和索引,以及查找附近位置等功能,我看到了这个帖子 - 我看到这篇文章Cassandra或MongoDB对于我们基于位置的应用建议mongodb作为最佳选择
Cassandra:
- 似乎是相关dbs中最好的 - 似乎有很好的写入和读取性能 - 本身不支持空间索引,但这可以通过geohashing扩展
我的心实际上是因为其良好的文档和对空间数据的直接支持而为mongodb服务.是否有任何机构在使用mongodb进行大型系统方面有不良经验?我实际上在mongodb iostat上看到很多关于性能的帖子.
如果mongodb不适合,有人可以使用cassandra给出一些关于geohashing的指示吗?我在http://code.google.com/p/geospatialweb/上看到了用于创建哈希的链接.但是如何查询等问题呢?
我想实现一项服务,根据用户的地理坐标,可以检测两个用户是否实时位于同一位置.
为了实时和扩展,我似乎应该使用像Redis这样的分布式内存数据存储.我已经研究过使用geohashing,但问题是彼此接近的点可能并不总是共享相同的哈希前缀.因为我有兴趣找到两个用户是否足够接近他们彼此相邻的位置,所以geohashing可能有点过分.
当然,简单的解决方案就是测试地理坐标对是否落在彼此的小距离内.但AFAIK,Redis和其他内存数据采集器没有地理空间索引来支持这种查找.
实现这个的最佳方法是什么?
我正在使用GWT和App Engine编写Web应用程序.我的应用程序需要根据纬度,经度发布和查询项目.
由于谷歌的分布式数据库设计,你不能简单地查询一组不等式.相反,他们建议做geohashing.该页面描述了该方法.
http://code.google.com/appengine/articles/geosearch.html
基本上,您预先计算边界框,以便查询已使用该边界框标记的项目.
我不明白这个过程的一部分."切片"属性是什么意思?
谢谢你的帮助!
我有一个给定的latlong点和它们周围的距离 - 例如{40.6826048,-74.0288632:20英里,51.5007825,-0.1258957:100英里}.如果我选择一个固定的geohash长度(比如等于~1x1mile),我如何从每个点找到具有给定半径的那个长度的所有geohash条目?
要添加一些背景 - 我想这样做的原因是我可以保存由geohash id键入的缓存,其中包含给定geohash在半径范围内的点列表的值(并且还匹配一些自定义资格规则).然后我可以快速查找用户的位置geohash,找到他们周围的所有符合条件的点.
如果geohash字符串的长度更长,则更准确.但有没有任何直接的关系,如果长度为7,它提供100米精度,
即如果两个geohash(和它们的任何一个边界框)有前7个字符匹配,两者应该接近100米等?
我正在使用geohash来查找,给定geohash的所有附近位置,以及它们的距离
还有任何直接计算两个地理哈希之间的距离?(一种方法是将它们解码为lat/lng,然后计算距离)
谢谢
我现在正在寻找一种优雅的算法,用geohashing算法(http://www.geohash.org)递归地找到邻居的邻居.
基本上采用中央geohash,然后获得围绕它的第一个"环"相同大小的哈希(8个元素),然后,在下一步,绕第一个等等获得下一个环.你听说过优雅吗?这样做的方法?
蛮力可能是让每个邻居都让他们的邻居忽略大量的重叠.围绕一个中心geohash的邻居已经解决了很多次(例如在Ruby中:http://github.com/masuidrive/pr_geohash/blob/master/lib/pr_geohash.rb )
编辑以澄清: 当前解决方案,传入中心键和方向,如下所示(使用相应的查找表):
def adjacent(geohash, dir)
base, lastChr = geohash[0..-2], geohash[-1,1]
type = (geohash.length % 2)==1 ? :odd : :even
if BORDERS[dir][type].include?(lastChr)
base = adjacent(base, dir)
end
base + BASE32[NEIGHBORS[dir][type].index(lastChr),1]
end
Run Code Online (Sandbox Code Playgroud)
(摘自Yuichiro MASUI的lib)
我说这种方法很快就会变得丑陋,因为一旦我们进入第二或第三环,方向就会变得丑陋.该算法理想情况下只需要两个参数,中心区域和距离0仅为中心地理位置(["u0m"]1是第一个由8个相同大小的地理位置组成的(=> [["u0t", "u0w"], ["u0q", "u0n"], ["u0j", "u0h"], ["u0k", "u0s"]])环,其中两个是第二个环,周围有16个区域.第一环等
你有没有办法以优雅的方式从位中推断出'戒指'?
我最近开始从事涉及地理位置、地图(Google Maps V3)等的个人项目。
该项目是用 Python 开发的,旨在在 Google App Engine 上运行。我了解到,为了找到靠近一个位置的标记/位置,可以使用 geohash 算法(这很酷)。
我不明白的是:假设我在数据存储中拥有我的所有位置(以及每个位置的纬度、经度和地理散列(高精度)。)
我知道我应该使用 geohash 的前缀(以匹配其中的位置),但是如何计算边界框的 geohash?考虑到边界框由两个点组成,东北和西南,我不明白如何去做。
为了让我哪个位置应该为当前可见的边框返回查询,我需要的地理散列的可见/可视边框-现在我知道我可以地理散列可视地图上的中心位置,但我不知道如何许多字母要切断(以降低精度)以实现与实际边界框的“拟合”。(或者也许这不是方式......?)
当边界框容器到 geohashes 时,你会怎么做?(就像在可视区域的中间,它在“dqcjr0”和“dqcjqb”之间分开)
另外,假设我有一个 5 个字母的 geohash,如何将其转换回可见的边界框?或者换句话说,我怎么知道什么是“包含”的哈希值,以及相邻的哈希值是什么?
在此先感谢您的帮助,
肯。
google-app-engine google-maps geolocation google-maps-api-3 geohashing
具有3D均匀网格,为了节省大型模型中的存储器,不需要保存空单元(不与任何对象重叠的单元).为了这个目的,我在c#中使用Dictionary.尽管性能已经降低,但这仍然比创建3D网格时出现异常更好.现在我的问题是找到一个快速哈希函数,将网格的3d整数坐标映射到唯一的数字.
我已经尝试过((x*73856093 + y*19349669 + z*83492791))%n,它并不总是生成一个唯一的数字.
我有一个36,742点的输入,这意味着如果我想计算距离矩阵的下三角形(使用vincenty近似),我需要生成36,742*36,741*0.5 = 1,349,974,563距离.
我想保持彼此相距50公里的对组合.我目前的设置如下
shops= [[id,lat,lon]...]
def lower_triangle_mat(points):
for i in range(len(shops)-1):
for j in range(i+1,len(shops)):
yield [shops[i],shops[j]]
def return_stores_cutoff(points,cutoff_km=0):
below_cut = []
counter = 0
for x in lower_triangle_mat(points):
dist_km = vincenty(x[0][1:3],x[1][1:3]).km
counter += 1
if counter % 1000000 == 0:
print("%d out of %d" % (counter,(len(shops)*len(shops)-1*0.5)))
if dist_km <= cutoff_km:
below_cut.append([x[0][0],x[1][0],dist_km])
return below_cut
start = time.clock()
stores = return_stores_cutoff(points=shops,cutoff_km=50)
print(time.clock() - start)
Run Code Online (Sandbox Code Playgroud)
这显然需要数小时和数小时.我想到的一些可能性:
我正在为app引擎数据存储寻找替代库,它将执行最近n或盒装地理查询,目前我正在使用GeoModel 0.2并且运行速度非常慢(在某些情况下> 1.5秒).有没有人有什么建议?
谢谢!
python gis google-app-engine geohashing google-cloud-datastore
geohashing ×10
geolocation ×2
gis ×2
python ×2
algorithm ×1
cassandra ×1
distance ×1
geo ×1
geocoding ×1
geospatial ×1
google-maps ×1
haversine ×1
map ×1
math ×1
mongodb ×1
numpy ×1
redis ×1
ruby ×1
voxel ×1