【问题标题】:How to model country, state and cities using Neo4j如何使用 Neo4j 对国家、州和城市进行建模
【发布时间】:2016-06-21 12:04:28
【问题描述】:

我正在为我的网站(它使用 Neo4j)构建一个注册表单,并且需要填充国家、州和城市字段。所有这些字段都是相互关联的,即根据国家,将设置州字段,并根据州城市设置。我正在尝试找出使用 Neo4j 进行建模的最佳方法。我是否需要为每个国家、州和城市创建节点,然后在所有节点之间创建关系?例如,底特律 - 属于 - 密歇根 - 属于 - 美国。在 Neo4j 中处理这个问题的最佳方法是什么?有什么例子可以看吗?在 Neo4j 中这样做会有效吗?还是使用基于文档的数据库更好,例如 MongoDB?

【问题讨论】:

  • 任何数据库,SQL 或 NoSQL,都可以轻松处理。 “最佳”是基于意见的。 Neo4J 是一个图形数据库。我可以看到一个以 country 开头的图表,其中包含 state 子项、city 和 zip 子项。这些很棘手,因为一个城市可以有很多邮政编码。我会做简单的事情 - 将它们放在关系数据库中并继续。
  • 问题不在于 SQL 或 NoSql 是否可以处理这个问题。也许,还不清楚。但是,我已经在我的网站上使用 Neo4j。那么,由于这样那样的原因/好处,使用 Neo4j 处理这个功能更好还是更好地在另一个数据库中处理。这是我第一次尝试构建类似的东西。认为在这方面有更多经验的人可以分享他的意见
  • 我理解了这个问题。我不会把它放在 Neo4J 中。图数据库最适合深度对象图。您的邮政编码数据并非如此。对于关系数据库来说,这很简单。我会把它放在那里。

标签: neo4j


【解决方案1】:

我看不出有什么理由你不能按照你的建议去做,为城市、州、国家创建节点并将它们连接起来(我计划在我即将到来的项目中做同样的事情)。这也让您可以在图表的其他部分重用这些节点,从而可能让您以比属性比较更快的速度使用常见位置进行有趣的查询。

如果我正确理解您的要求,您将拥有下拉菜单或自动填充字段或类似的字段以深入到每个级别(使用国家/地区填充下拉列表 -> 使用所选国家/地区的州填充下一个下拉列表 -> 使用城市填充最后一个下拉列表处于选中状态)。只需在标识符或缩写上添加索引以进行快速节点查找,就可以了,它应该工作得很快。

如果您要在其中添加邮政编码,这可能会很棘手,因为您无法真正以相同的方式对其进行建模。您将拥有从州和城市到 zip 的一对多关系,除非我弄错了,否则有一些有趣的 zip 可以跨越多个州和/或城市。其他一些可能使事情复杂化的因素包括 5 位和 9 位拉链(其他国家/地区或更多),以及其他国家/地区对等价拉链的处理,因为它们可能遵循不同的逻辑。

【讨论】:

  • 是的,这绝对是可能的,但一开始我只是避免创建所有 50,000 个节点,因为其中许多节点甚至可能不会被使用。我正在采取两步走的方法。我正在使用烧瓶框架,所以我将使用 csv 文件填充下拉菜单。当用户提交注册表时,我将为城市、州、国家创建节点。因此,正如您所建议的,我可以在图表的其他部分重用节点。我没有意识到您关于在标识符或缩写上添加索引的建议。我也会尝试一下,看看效果是否更好。感谢您的想法!
  • 只有当您的查询从城市(或州或国家)开始并通过一些自定义标识符或缩写指定时,索引才可能有用,例如关于底特律用户数据的查询,或在加利福尼亚州内,或其他地方。如果您从与城市(或国家或州)具有单一(或很少)关系的其他一些数据开始,那么索引将无济于事,因为链接节点的查找和遍历已经是恒定的 -时间。
猜你喜欢
  • 2011-11-09
  • 2017-10-20
  • 2011-01-14
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2017-11-11
  • 2013-02-08
  • 1970-01-01
相关资源
最近更新 更多