Neo4j:对节点使用数字索引

Neo4j: using a numeric index for nodes

这是py2neo 1.6。 我的问题是如何为每个想法生成 unique_identifier(请参阅注释行)以便为图像设置不同的文件名。 目前我们使用 python 的 uuid。 我想知道 neo4j 中是否有一些实用程序可以在将节点添加到索引时将一个不同的数字关联到每个节点,这样我们就可以使用这个数字作为我们的 unique_identifier

def create_idea_node(idea_text):
    #basepath = 'http://www.example.com/ideas/img/'
    #filename= str(unique_identifier)+'.png'
    #idea_image_url = basepath + filename
    newidea_node, = getGraph().create({"idea": idea_text, "idea_image_url": idea_image_url})
    _getIdeasIndex().add("idea", idea_text, new_idea_node)
    return OK  

def _getIdeasIndex():
    return getGraph().get_or_create_index(neo4j.Node, "Ideas")

Neo4j 节点有 id,它们是整数,但是如果一个节点被销毁并重新创建,该整数可能会被重新使用。 id(n)是节点n的id。 UUID有问题吗?当您在扩展时跨多个服务器进行多线程或分布计算项目时,整数解决方案可能会出现问题。所以除非 UUID 解决方案有问题,否则我会坚持使用它。

尽管难以阅读,并且可能需要更多的存储空间,但与尝试使用整数(通常)强制唯一性相比,UUID 具有许多优势。我鼓励您在 Wikipedia.

上阅读 UUID 的本质

整数唯一性在尝试跨独立系统扩展时存在许多缺陷(出于容错和性能原因)。如果您可以开始使用 UUID,那么您可以随着您的解决方案的长期发展而减少很多麻烦。

FWIW,如果您最终将 UUID 存储在 PostgreSQL 中,请务必利用 'uuid' 数据类型。它将使这些值的存储和索引几乎与普通整数一样高效。 (很难区分。)