是否可以对一个Neo4j数据库进行划分,以便在一个数据库中有多个起点,以便可以隔离所有查询,而不是拥有多个数据库?
我已经考虑过这个问题,我认为它可以达到一定程度,但是一旦使用像标签这样的东西,那么这个想法将无效,因为标签查询将始终跨越整个数据库。
无论如何,我想知道是否有人成功完成了这项工作以及他们是如何做到的。
答案 0 :(得分:5)
你所描述的听起来像多租户。 Neo4j 2.0.1目前不支持多租户作为功能。在Neo4j数据库实例中实现多租户架构有各种方法和策略。
您可以按标签对属性图的集合进行分区。由于节点可以有多个标签,因此您可以使用该分区的唯一标识标签标记一个分区。
请参阅此处标签上的文档:http://docs.neo4j.org/chunked/milestone/graphdb-neo4j-labels.html
此策略需要注意的是确保所有Cypher调用都包含标签的分区标识符,以确保两个分区在图中彼此隔离。确保来自一个分区的关系不会跨越另一个分区非常重要。
例如,分区1可以是标签Partition1
。假设您的应用程序上下文在Partition1
上运行:
MERGE (user:User:Partition1 { name: 'Peter' })
RETURN user
假设您的应用程序上下文在Partition2
上运行:
MERGE (user:User:Partition2 { name: 'Peter' })
RETURN user
执行这两个查询时,会为Partition1
和Partition2
创建两个单独的Peters。
您只需要确保应用程序运行的分区标签将其标签附加到每个查询。虽然这很乏味,但目前建议采用多租户方式。