我正在启动一个分析项目,该项目将处理数百万个地理本地化数据。数据可能是这样的:
id{
userId,
long,
lat,
time,
appId
}
我的主要业务:
- 获取区域中包含的所有数据
- 查找属于某个userId的所有点
- pub/sub显示所有新条目
- 在所有数据上添加/删除字段(或仅添加少量)
我想使用Meteor.js,需要接近实时的性能(最大约0.5秒至3秒)。
也许这很重要:我的成绩需要在3-15米之间。
所以我看了看:
Redis:接缝使用简单,有一个Redis-Geo插件。此外,还有一个流星的司机。
PostGIS:M+条目的实时性能?没有流星的司机。
PostGre:流星有一个驱动程序。
Hbase:为大桌子构建接缝。没有流星的司机。
你会用哪一个?(任何其他建议都将不胜感激。)
nodejs有一个postgres客户端,它应该可以与流星一起使用。当谈到PostGIS时,它就像一种魅力(我自己在一些项目中使用过它)。不过,在设计查询时,您必须处理输出(使用postGIS输出函数(例如ST_AsGeoJSON),并结合ARRAY)。
PostGIS可能是空间查询的最佳选择。它经过彻底的测试,维护得当,并在许多应用中使用。
不过,我不能断言您的性能限制。空间查询本质上是复杂的(例如:多边形交集的复杂度最多为O(n^2))。不过,您可能能够通过索引和缓存来缓解性能问题。一直为我工作,但我从不需要处理紧张的查询时间限制。
关于您的操作:除了第一个操作外,所有操作都应该几乎不需要任何成本(从数据库性能角度来看)。第一个查询可能有点棘手,因为您必须使用以下函数之一:ST_Intersects()
、ST_Contains()
或ST_Covers()
。所有这些都具有比O(n)更大的复杂性。您的查询可以进行设计,使其运行速度相当快,但正如我所说:我不知道您的约束是否得到了遵守。