如何在不创建大量冗余节点的情况下将连续变量建模到给定精度

问题描述 投票:0回答:1

我有一个必须很常见的挑战,但我不知道如何去做!我知道它已经在时间树中解决了,但它是如何完成的?

我想以毫米为单位对产品尺寸进行建模,可能的范围是从零到3000毫米,分辨率低至0.001毫米。绝大多数值将在 50 到 150 毫米之间,但此范围内的任何值都是可能的。我可以创建一个中心节点,然后是子节点、下一个节点、最后一个节点,覆盖数十年的整个范围(比时间树简单!),但在存储单个数据之前,我会拥有 3,000,000 个标记为“维度”的节点......

如何建立一个系统来识别何时生成了一个新节点(例如 68.55 毫米),并将其放入树中的正确位置,生成填充树所需的任何缺失节点和关系并删除多余关系?

我想这有标准的代码吗?

neo4j cypher
1个回答
0
投票

与任何 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 *

如果您不打算添加超过几百万个产品,您也可以将其简化很多。

© www.soinside.com 2019 - 2024. All rights reserved.