【发布时间】:2015-08-01 19:39:52
【问题描述】:
我正在自学图形建模并使用带有 NodeJs 和 Express 框架的 Neo4j 2.2.3 数据库。
我浏览了免费的neo4j图形数据库书,学习了如何建模场景、何时使用关系以及何时创建节点等。
我已经建模了一个汽车销售场景,具有以下结构
节点
(: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 是 VEHICLE 节点),车辆的大部分特征被创建为单独的节点,并在具有共同特征的车辆之间共享。
您能否建议颜色、车身类型、驾驶侧(左驱动或右驱动)、变速箱等角色(标签)应该是单独的节点还是车辆节点的属性?哪个选项对性能更友好且易于查询?
我想编写一个 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 个关系,听起来有点吓人,如果它达到 100 万个 VEHICLE,那么最多有 1500 万个关系。如果我朝错误的方向前进,请发表评论。
感谢您的宝贵时间。
【问题讨论】:
-
我正在开发一个类似的模型......这对你来说效果好吗?
标签: neo4j