一个图形数据库中有多个“数据库”

4

我使用GrapheneDB来托管我的neo4j数据库(db)。

问题

我有N个客户,正在寻找自动分离他们内容(他们独特的db)的方法,以满足以下要求:

  • 不重叠数据
  • 不影响操作速度。

选项1

由于我不熟悉如何自动创建新的neo4j服务器,并且想保持简单,我的想法是为图中的每个节点和关系附加唯一的databaseId。

然后显然我将应用具有该限制的查询。

选项2

另一个想法是创建一个根节点,并为所有节点与根节点创建关系。

问题

我的问题是:

  • 哪个选项在速度方面更好,提高了多少?
  • 这是一种可行的方法,你是否看到了优点/缺点?
  • 当我拥有大量数据(N --> /inf)时,它会影响速度吗? 我认为不会,因为您应用了databaseId限制(例如在noSQL中,这非常有效),但我不确定它是否同样适用于neo4j图形数据库。

3
你所提到的功能是多租户,供参考。 - InverseFalcon
1个回答

1
作为一般建议(因为我对您的使用情况一无所知),我建议为每个“逻辑数据库”(LDB)使用一组不相交的节点标签。这将使得创建和访问属于特定LDB的节点变得容易。如果您仅在具有属于同一LDB的标签的节点之间创建关系,则图遍历也将保持在同一LDB内。
Neo4j可以快速通过标签获取节点,您还可以创建索引,以便高效地查找标签/属性组合。

好的,如果我理解正确,那就是选项1吗?(使用索引) - WJA
1
选项1(我假设LDB都共享相同的标签)更加复杂,因为为了提高性能,您需要为每个节点标签创建一个索引(例如,:Label1(databaseId):Label2(databaseId)等),并编写额外的代码以始终通过正确的databaseId属性限定所有查询。当您添加节点时,索引需要时间来更新,它们还会占用存储/内存空间。由于neo4j始终将新标记的节点添加到适当的内部标记集合中,因此您可以使用这些标记集合来查找属于LDB的节点。 - cybersam
1
我想更像是对于LDB 1使用:Movie1,对于LDB 2使用:Movie2等等。由于Cypher代码通常作为字符串传递给某些API,因此在生成Cypher字符串时,您可以将正确的后缀附加到每个“基本”标签字符串上。 - cybersam
清楚了。只是作为跟进。您不会将关系标签进行分区,对吧?只分区节点?这对性能没有影响? - WJA
另外,我的标签名很长,这会影响性能吗?例如Movie49eabcjcgemshfshnwtrsfjhqg4hflerjnjsntzhfsdeoa09vstack - WJA
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接