在Neo4j中存储UUID的最佳方式?

时间:2015-12-05 21:08:26

标签: indexing neo4j uuid graph-databases

如果我尝试简单的

thingNode.setProperty("uuid", thing.getId());

我得到了

java.util.UUID] is not a supported property value

然而,将128位UUID存储为36个字符的字符串会非常浪费。如果我将UUID拆分为单独的属性

thingNode.setProperty("uuid-begin", thing.getId().getMostSignificantBits());
thingNode.setProperty("uuid-end", thing.getId().getLeastSignificantBits());

它出现I can only create an index on a single property,并且必须以某种方式将UUID的两个位连接成一个属性。如上所述,由于存储空间非常低效,因此不希望使用字符串。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我过去曾使用过以下代码段。因为UUID是"一件事"将它存储到一个属性中是一个好主意。正如您已经提到的,索引总是建立在一个属性上。

final StringBuilder sb = new StringBuilder();
sb.append(Long.toHexString(uuid.getMostSignificantBits()))
  .append(Long.toHexString(uuid.getLeastSignificantBits()));
String uuidAsString = sb.toString();
node.setProperty("uuid", uuidAsString);

请注意,有一个现成的解决方案可以管理Neo4j中的uuids:https://github.com/graphaware/neo4j-uuid