【问题标题】:Which (near) realtime spatial database for 1M+ entries?哪个(近)实时空间数据库用于 1M+ 条目?
【发布时间】:2015-05-20 03:03:13
【问题描述】:

我正在启动一个分析项目,该项目将处理数百万个地理定位数据。 数据可能是这样的:

id{ userId, long, lat, time, appId }

我的主要业务:

  • 获取区域中包含的所有数据
  • 找到属于一个userId的所有点
  • 发布/订阅以显示所有新条目
  • 在所有数据(或仅少数)上添加/删除字段

我想使用 Meteor.js 并且需要接近实时的性能(最大约 0.5 秒到 3 秒)。

也许这很重要:我的结果需要 3-15m 之间的精度。

所以我看了:

Redis : 接缝使用简单,有一个Redis Geo 插件。另外还有一个流星驱动。

PostGIS : 具有 M+ 个条目的实时性能?没有流星的驱动程序。

PostGre :有一个流星的驱动程序。

Hbase : 为大表构建接缝。没有流星的驱动程序。

你会用哪一个? (任何其他建议将不胜感激。)

【问题讨论】:

  • 你为什么不测试一下? Postgis 应该能够毫无问题地处理这个问题,除非您没有正确的索引或编写非常糟糕的查询。如果 PostGre 是 PostgreSQL 的别名,那么 PostGIS 就是在 PostgreSQL 上运行的扩展。不要忘记,一百万条记录对于数据库来说几乎是零。
  • @FrankHeikensThw 为您提供建议。我还没有测试,因为我不知道我在做什么 :) 但是你已经把可能性降到最低了。所以谢谢:)
  • 如果您需要获取地理信息,可以试试SmartyStreets API

标签: postgresql geolocation redis hbase postgis


【解决方案1】:

有一个postgres-client for nodejs,应该可以和meteor一起使用。当涉及到 PostGIS(在某些项目中自己使用它)时,它就像一个魅力。但是,您必须处理输出(在设计查询时使用 postGIS-output-functions(例如 ST_AsGeoJSON),结合 ARRAY)。

就空间查询而言,PostGIS 可能是最佳选择。它经过全面测试、适当维护并用于许多应用中。

不过,我无法对您的性能限制做出任何断言。空间查询本质上是复杂的(例如:多边形相交最多具有 O(n^2) 复杂度)。不过,您也许可以通过索引和缓存来缓解性能问题。一直为我工作,但我从来不必处理严格的查询时间限制。

关于您的操作:除了第一个之外,所有操作都应该几乎没有成本(数据库性能方面)。第一个查询可能有点棘手,因为您必须使用以下函数之一:ST_Intersects()ST_Contains()ST_Covers()。所有这些都具有大于 O(n) 的复杂度。可以设计您的查询,使其运行得非常快,但正如我所说:我不知道您的约束是否得到尊重。

【讨论】:

  • 3ms(如果不是拼写错误)很好!确实,即使是 3s 也可以。我正在寻找接近的实时性能。你试过其他的 [link]Redis Geo(matt.sh/redis-geo#_how-to-add-geo-commands-to-redis) 或 HBase 吗?
  • 不,我没有,但是 Redis Geo 听起来很有趣......虽然它的功能非常有限,而且......是的,这是一个错字;-)......我删除了那句话
  • 好的,我想我将从 postGis 开始。关于分区。我想我有一个想法:确实一个区域是预定义的,因为它是一个管理区域。所以一个点可以在插入时设置一个zoneIdentifierId(例如:邮政编码)关于它的位置。通过这种方式,我可以轻松检索区域,而无需使用复杂功能。
  • @DanielN:是的,你可以这样做。它肯定会比交集或conainment-functions 快。我建议您尝试实施它们。您可以学到很多东西,并且可以让您大开眼界,了解 postGIS 和空间数据库的工作原理。
  • 当然我会实现这个,因为它不是时间紧迫的。现在我必须找到一种方法让流星与 postgis 一起工作。有一个用于meteor的PostGreSQL包,我不知道我是否可以在此基础上安装PostGIS。
猜你喜欢
  • 2012-12-31
  • 2011-12-14
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多