我正在启动一个分析项目,该项目将处理数百万个地理定位数据。 数据可能是这样的:
id{
userId,
long,
lat,
time,
appId
}
我的主要业务:
我想使用Meteor.js并且需要近乎实时的性能(最多~0.5s到3s)。
也许这很重要:我的结果需要3-15米之间的精度。
所以我看了看:
Redis:接缝简单易用,有一个Redis Geo插件。另外还有一个流星驱动程序。
PostGIS: M +条目的实时表现?没有流星的司机。
PostGre:有一个流星驱动程序。
Hbase:为大表格构建接缝。没有流星的司机。
你会使用哪一个? (任何其他建议将不胜感激。)
答案 0 :(得分:5)
有一个postgres-client for nodejs,这应该可以用于流星。当它涉及PostGIS(在一些项目中自己使用它)时,它就像一个魅力。您必须处理输出(使用postGIS-output-functions(例如ST_AsGeoJSON),结合ARRAY,同时设计您的查询)。
在空间查询方面,PostGIS可能是最佳选择。它经过严格测试,维护得当,可用于许多应用中。
我不能对你的性能限制做出任何断言。空间查询固有地复杂(例如:多边形交叉最多具有O(n ^ 2)复杂度)。您可以通过索引和缓存来缓解性能问题。总是为我工作,但我从来不必处理严格的查询时限制。
关于您的操作:除了第一个之外的所有操作都应该几乎没有成本(数据库性能明智)。第一个查询可能有点棘手,因为您必须使用以下函数之一:ST_Intersects()
,ST_Contains()
或ST_Covers()
。所有这些都具有大于O(n)的复杂性。您的查询可以设计,以便它运行得非常快,但正如我所说:我不知道您的约束是否得到尊重。