【发布时间】:2019-09-04 07:32:58
【问题描述】:
上下文:我正在构建一个 Node.js 应用程序,它需要跟踪城市中的活跃用户数量。
在服务器端,有一个城市名称与城市活跃用户数量的映射。例如,"Las Vegas" : 5。但是对于同名的不同城市,如Newport, WA和Newport, RI,由于key重复,服务器无法正确更新活跃用户数.
将州添加到密钥中不起作用,因为这是针对美国的解决方案(例如[city name]-[state]),并且将国家/地区添加到密钥中也不起作用(例如[city-name]-[country]),因为这不包括同一个国家的不同城市。
我研究过将纬度和经度数据嵌入到密钥中,但这可能无法使用,因为城市边界差异很大。问题是,我可以确保具有相同名称的不同城市作为具有某种格式的不同键出现在字典中,例如city-[longNum]-[latNum]。客户端,我可以得到城市名称、经纬度坐标,但很明显,客户端的坐标不会与城市中心坐标完全相同,所以没有办法使用city-[longNum]-[latNum] 格式在服务器字典中正确定位客户端的城市。
如果客户位于重复城市,是否有任何方法可以从字典/映射中找到客户的正确城市?我正在考虑使用 Redis 的地理空间索引,但我不确定这是否适用于这个问题。
【问题讨论】:
-
规范化你的数据,制作两张表
cityID=>cityName和cityID=>data。 -
@georg 它已经被规范化了,因为
cityName应该是唯一的。 -
@Yola 但是名称相似的城市的键确实有欺骗性。在唯一标识符(可能是增量 id)上规范化数据确实有意义。
-
@ambianBeing Hm.. 如果 OP 同意在客户端使用 ID 并使用这些 ID 进行查询,那么这将起作用。
标签: javascript node.js algorithm data-structures geolocation