2

我正在构建一个大型图形数据库,其中包含关于每个节点的大量元数据(每个节点有数千个属性)。我目前正在确定哪些元数据应该是 Neo4j 中的节点,哪些应该成为节点的属性,哪些应该存放在单独的数据库中。

我的想法是以 3 种方式使用元数据:
1 - 如果该属性在许多节点之间共享,则将该属性设为自己的节点并为该属性创建一条边。

2 - 如果属性对遍历图很重要,但不是“高度”共享,则将其添加为节点属性。(如果需要,也可以在 Neo4j 中编制索引)

3 = 如果元数据严格描述该节点,将其存储在单独的 NoSQL 数据库中,Neo4J 节点 ID 成为另一个数据库的外键。

虽然这似乎是使用图形数据库最有效的用法,但拥有不同的属性类型并在使用它之前必须确定它是哪种类型的属性似乎很痛苦。(可能是一个属性查找键值存储)这也可能意味着我需要一种简单的方法来将属性从 3 提升到 2 到 1,以便在属性变得高度共享或需要高效遍历时使用。

有没有人采取这种方法?有什么要分享的想法,或者要避免的事情吗?

4

1 回答 1

6

永远不要将 Neo4j 节点 ID 存储在外部系统中。节点 ID 基本上是相应存储文件中的偏移量。如果你删除一个节点,它的 id 可能会在创建新节点时被重用。

正确的做法是拥有一个“好的”标识符(例如 uuid)作为节点属性并将其放入 Neo4j 的索引中。然后将该 uuid 保存以存储在第三方系统中。

前段时间我创建了一个非托管扩展,为每个新节点添加一个 uuid 并防止手动更改这些 uuid:https ://github.com/sarmbruster/neo4j-uuid 。

更新 (2013-08-21)

用 Neo4j 写过关于 UUID 的博客

于 2013-03-20T15:45:22.380 回答