【问题标题】:Node.js: How to deal with looking up different cities with the same name in a dictionary?Node.js:如何处理在字典中查找同名的不同城市?
【发布时间】: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


【解决方案1】:

这是一个关于如何设计城市存储城市名称的策略而不是使用字典的问题。

您可以将城市的信息放置在如下结构中并序列化。

{
  "country": "USA",
  "name": "Newport",
  "subdivision": "WA",
}

您可以使用更多字段,其中一些字段可能为空,具体取决于其他字段。就像某些国家/地区您不存储细分一样。

作为另一种选择,您可以重新设计您的客户端,以使用城市的某种唯一标识符来使用查询信息。并从服务器查询他们的文本名称。但这取决于数据在地图中的表示方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2021-12-11
    • 2021-04-25
    相关资源
    最近更新 更多