如何对单个Neo4j数据库进行分区?
一个Neo4j数据库是否可以划分,以便在一个数据库中有多个起始点,从而可以隔离所有查询,而不是有多个数据库 我已经考虑过这一点,我认为它在一定程度上是可行的,但一旦使用了标签之类的东西,这个想法就行不通了,因为标签查询将始终覆盖整个数据库如何对单个Neo4j数据库进行分区?,neo4j,Neo4j,一个Neo4j数据库是否可以划分,以便在一个数据库中有多个起始点,从而可以隔离所有查询,而不是有多个数据库 我已经考虑过这一点,我认为它在一定程度上是可行的,但一旦使用了标签之类的东西,这个想法就行不通了,因为标签查询将始终覆盖整个数据库 无论如何,我想知道是否有人成功地做到了这一点,以及他们是如何做到的。你所描述的听起来像是多租户。Neo4j 2.0.1目前不支持多租户功能。在Neo4j数据库实例中实现多租户体系结构有多种方法和策略 可以按标签对属性图的集合进行分区。由于节点可以有多个标签,因
无论如何,我想知道是否有人成功地做到了这一点,以及他们是如何做到的。你所描述的听起来像是多租户。Neo4j 2.0.1目前不支持多租户功能。在Neo4j数据库实例中实现多租户体系结构有多种方法和策略 可以按标签对属性图的集合进行分区。由于节点可以有多个标签,因此可以使用该分区的唯一标识标签来标记一个分区 请参阅此处标签上的文档: 这个策略需要注意的是确保所有的Cypher调用都包含标签的分区标识符,以确保两个分区在图中彼此隔离。确保来自一个分区的关系不会跨越到另一个分区是很重要的 例如,分区1可以是标签
Partition1
。假设您的应用程序上下文在分区1
上运行:
MERGE (user:User:Partition1 { name: 'Peter' })
RETURN user
假设您的应用程序上下文在分区2
上运行:
MERGE (user:User:Partition2 { name: 'Peter' })
RETURN user
执行这两个查询时,将为Partition1
和Partition2
创建两个单独的PETS
您只需要确保应用程序所操作的分区标签将其标签附加到每个查询中。虽然这很乏味,但这是目前进行多租户的建议方式。您是否尝试过使用WHERE子句?例如,使用电影数据集类似这样的
MATCH(people:Person)-[relatedTo](Movie:Movie)WHERE people.name in[“Tom Hanks”,“Keanu Reeves”]返回people.name,Type(relatedTo),relatedTo
是的,我尝试了WHERE子句,但在所有查询中都使用了people.db\u Type='schema\u id\u 323'。但是对于devleoper来说,为where子句中的每一项添加属性变得非常麻烦。我认为使用START会很好,因为它可以添加到每个查询的开头。听起来这是一种合理的方法。有没有办法让每个查询自动为相关分区添加:partition2 qlaifier,而不在密码中指定它?在代码中,这应该不会太难实现。编写一个类,该类接受在您的Cypher查询上运行的租赁上下文,并在与任意标签匹配的任何位置注入分区标签。租赁上下文?我甚至没听说过这个。我将对此进行研究并尝试。顺便说一句,我是通过Clojure和Neocons库访问Neo4j的,因此我需要比Java APiBy租户上下文更深一点,我指的是租户的上下文,即您的分区:)如何动态设置标签名称?例如,分区xyz