数据库设计 – 使用Redis的地理程序设计建议
我正在学习Redis,并正在建立一个学习目的的地理计划.我只想使用Redis来存储数据,并尝试避免任何关系数据库.我的问题是如何最好地为程序设计数据库.这就是程序的运行方式:
1)我将在世界各地创造数百万个随机机器人,这些机器人漫游,所以他们可以有不同的地理坐标(一些机器人可以在完全相同的空间). 2)每个机器人将随机发送一个邮件到服务器(平均每几个小时),其中包含: 3)我将拥有所有机器人的地图,并希望能够点击机器人并获取此信息: 4)由于我将在AWS上托管这一事实,因此我需要每隔几个小时删除一次帖子以保持内存使用量低,所以某些类型的到期是强制性的. 我的主要关注点是性能,我对如何设计Redis数据库感兴趣. 在一天的时间里,我将会随机提供数学随机的数据,大概会产生约5亿个帖子. 我迄今未完成的想法: 想法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命令从哈希集中删除字段,所以我需要定期扫描所有的hashset字段,并找到旧的时间戳并将其删除.由于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 kms内. 3)然后我现在被困在如何删除旧帖子 解决方法让我给你一个基于我如何理解你的问题的想法:而不是在hash中存储值,只需将所有内容存储在redis中. 例如:setex GeoLocation:12.31939:1:timestamp 1432423232(timestamp)14400(4 hrs) 因此,您将获得来自所有机器人的任何数量的帖子,具有不同的键,访问和设置过期也变得容易. 现在要获取特定机器人发布的所有信息,请使用GeoLocation:(特定机器人的位置):*并获取每个的值. 以这种方式,您不需要扫描redis中的所有键.你会得到相对较快的信息,钥匙已经过期了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |