1)我将在世界各地创建数百万个随机机器人,它们会漫游,以便它们可以拥有不同的地理坐标(某些机器人可能处于完全相同的空间)。
2)每个机器人都将随机向服务器发送帖子(每几个小时可能平均一次),其中包含: a)机器人发送此数据的位置(以坐标或geohash的形式) b)一些小文本
3)我将有一个带有所有机器人的地图,并希望能够单击机器人并获取此信息: a)所有在我刚才点击的机器人附近发布的帖子
4)由于我将在AWS上托管此内容,因此需要每隔几个小时删除帖子以保持内存使用率较低,因此某种类型的到期是强制性的。
我的主要关注点是性能,我对如何设计Redis数据库感兴趣。
在一天之内(我将计算随机帖子做到这一点)将生成约500,000,000个帖子。
到目前为止,我的想法还不完整:
Idea 1:
1)帖子应存储如下:
`HSET [Geohash of location] [timestamp] [small text] (<-- the value will be used in a later feature to increment the number of manual modification I make to a post).
2) 然后,我可以通过发送机器人所在的geohash位置来获取附近所有帖子。这里的问题是我还需要包括他的8个geohash邻居,这将需要8个以上的查询。这就是为什么我也在探索空间接近度概念来实现此功能。
HGETALL [GeoHash Location of robot]
这将返回字段([timestamp])和值(“0”);
3)旧帖子的过期。由于我无法使用EXPIRE命令从哈希集中删除字段,因此需要定期扫描所有哈希集字段并查找旧时间戳并将其删除。由于Redis只允许模式搜索,当所有时间戳都不同时,这将是困难的。
想法2:
使用Redis-geo (https://matt.sh/redis-geo)。
1)为了存储帖子,我会运行:
geoadd globalSet [posts_long] [posts_lat] "small text";
2)获取附近机器人的所有帖子信息:
georadius globalSet [robots_long] [robots_lat] [X] km
这将返回所有距离机器人在X公里范围内的帖子。
3)现在我卡在了如何删除旧帖子上。
GEOADD
命令支持地理集合。 - Itamar Haber