我正在自学图形建模并使用带有NodeJs和Express框架的Neo4j 2.2.3数据库。
我浏览了免费的neo4j图形数据库书籍,学习了如何建模场景,何时使用关系以及何时创建节点等。
我已经建模车辆销售方案,具有以下结构
NODES
(:VEHICLE{mileage:xxx, manufacture_year: xxxx, price: xxxx})
(:VFUEL_TYPE{type:xxxx}) x 2 (one for diesel and one for petrol)
(:VCOLOR{color:xxxx}) x 8 (red, green, blue, .... yellow)
(:VGEARBOX{type:xxx}) x 2 (AUTO, MANUAL)
关系
(vehicleNode)-[:VHAVE_COLOR]->(colorNode - either of the colors)
(vehicleNode)-[:VGEARBOX_IS]->(gearboxNode - either manual or auto)
(vehicleNode)-[:VCONSUMES_FUEL_TYPE]->(fuelNode - either diesel or petrol)
如上面的屏幕截图所示(136& 137是车辆节点),车辆的大部分功能都是作为单独的节点创建的,并在具有共同特征和关系的车辆之间共享。
请问您可以告知颜色,车身类型,驾驶侧(左侧驾驶或右侧驾驶),变速箱等角色(标签)是否应该是车辆节点的单独节点或属性?哪个选项更加性能友好,易于查询?
我想编写一个JS代码,允许使用一个或多个搜索条件查询具有上述结构的图形。如果这些功能中的大部分都是VEHICLE节点的属性,则查询并不困难:
MATCH (v:VEHICLE) WHERE v.gearbox = "MANUAL" AND v.fuel_type = "PETROL" AND v.price > x AND v.price < y AND .... RETURN v;
然而,对于我现有的图形模型,它很难搜索,特别是当有多个标准不一定是VEHICLE节点的属性而是单独的节点并通过关系链接时。
有关图表现有结构的任何想法和建议,以使其更具查询性和性能友好性将非常感激。如果我们想象一个具有1000个VEHICLE节点的场景将产生15000个关系,听起来有点可怕,如果它达到一百万辆车,那么最多可以达到1500万个关系。如果我朝错误的方向前进,请发表评论。
感谢您的时间。
答案 0 :(得分:1)
建模充满了权衡,看起来你有一个不错的开始。
不要担心关系的数量。这就是图形数据库所擅长的,所以我不会太担心过度使用它们。
某些东西应该是属性还是节点?我不能回答你的情况,但有些事情需要考虑: