对于通过 HTTP 对公共地理位置数据进行可扩展的频繁读取/写入,我应该选择哪种解决方案?

Posted

技术标签:

【中文标题】对于通过 HTTP 对公共地理位置数据进行可扩展的频繁读取/写入,我应该选择哪种解决方案?【英文标题】:Which solution should I pick for scalable frequent read / write of public geolocation data over HTTP? 【发布时间】:2019-12-30 04:57:09 【问题描述】:

我正在设计一个应用程序,用户可以同意在特定范围内的任何其他用户之间共享他们的地理位置(纬度、经度)。

这意味着如果有 100 个用户在 X 半径范围内积极使用该应用程序,他们每 N 秒更新一次位置数据并相互共享。

换句话说,实时应用意味着 1 次写入 = 100 次读取,100 次写入等于 10000 次读取。

我可以从软件方面做的一件事是操纵写入/读取间隔以减少负载突发(最好均匀分布)。

但还有另一件事是具有地理查询能力的可扩展解决方案。

我尝试的是 Firestore,但付款模式不合适,我需要一个固定价格的解决方案。

我一直在考虑像 Kafka 或 RabbitMQ 这样的消息代理,但我不确定它们是否支持地理查询。

现在我正在研究 Redis 和 PostGIS,我还应该考虑通过 HTTP 请求/响应返回数据的方式。

由于数据始终是公开的(当用户同意时),所以没有任何授权开销,因此我正在寻找最简单、最快的解决方案。

如果有任何提示,我将不胜感激

【问题讨论】:

如果没有外部工具,消息队列根本不支持“查询” 您将不得不在某种程度上为此编写自定义代码。我从事的一个项目基本上编写了自己的消息代理来处理更新事件中的地理空间“兴趣”。或者,您可以为 RabbitMQ 创建一个自定义交换类型,但我不知道这会涉及到什么程度。 【参考方案1】:

由于您的应用程序读写繁重。最好使用内存解决方案。从这一点开始,您可以使用Redis|GEORADIUS。 Redis 具有内置的地理位置搜索功能。并且还能够以最少的资源要求处理数百万次读写。

【讨论】:

这证实了我的想法,我认为这应该足够了。接受我的接受

以上是关于对于通过 HTTP 对公共地理位置数据进行可扩展的频繁读取/写入,我应该选择哪种解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

使用bender对thrift接口进行压测

环形缓冲区

使用谷歌地图上的地理位置按彼此最近的位置对学生的家进行分组?

网络文件系统的演化

1.Solr介绍

通过bin-log对mysql进行数据恢复