我有一个必须很常见的挑战,但我不知道如何去做!我知道它已经在时间树中解决了,但它是如何完成的?
我想以毫米为单位对产品尺寸进行建模,可能的范围是从零到3000毫米,分辨率低至0.001毫米。绝大多数值将在 50 到 150 毫米之间,但此范围内的任何值都是可能的。我可以创建一个中心节点,然后是子节点、下一个节点、最后一个节点,覆盖数十年的整个范围(比时间树简单!),但在存储单个数据之前,我会拥有 3,000,000 个标记为“维度”的节点......
如何建立一个系统来识别何时生成了一个新节点(例如 68.55 毫米),并将其放入树中的正确位置,生成填充树所需的任何缺失节点和关系并删除多余关系?
我想这有标准的代码吗?
与任何 Neo4J 模式一样,我会专注于针对您想要询问的问题进行设置,而不是构建数据的最合乎逻辑的方式。
我的直觉反应是使用范围设置架构,然后仅在需要时合并特定维度。我将围绕 :Meters、:Decimeters、:Centimeters、:Millimeters 标签设计架构,并在值属性上使用索引。
例如:
(0m) 将有 10 个子节点:(0dm) - (9dm) 等
所以你给出的例子是 68.55 毫米
MERGE (m:Meters { value: 0 })
MERGE (dm:Decimeters { value: 0 })
MERGE (cm:Centimeters { value: 6 })
MERGE (mm:Millimeters { value: 68 })
MERGE (d:Dimension { dimension: 68.55 })
MERGE (p:Product { id: "foo_abc123" })
MERGE (m)-[:AGGREGATES]->(dm)-[:AGGREGATES]->(cm)-[:AGGREGATES]->(mm)-[:AGGREGATES]->(d)<-[:OF_SIZE]-(p)
RETURN *
如果您不打算添加超过几百万个产品,您也可以将其简化很多。