【问题标题】:Are there any Graph Databases that allow you to define the labels and relationships (schema) first是否有任何图形数据库允许您首先定义标签和关系(模式)
【发布时间】:2023-11-03 14:31:01
【问题描述】:

我正在为我正在构建的一个新站点构建一个图形数据库,并遇到了 neo4j。

虽然这是一个可行的选择,但我不喜欢动态创建标签和关系的想法。相反,我只想事先定义标签和关系,这样我的数据库就可以更加稳定。

很像 RDBMS,我们首先定义表和属性,但我想先定义标签和关系及其属性。

【问题讨论】:

  • 有什么好处? oO RDBMS 不是无模式的。 Neo4j 是并且它是它的强项之一。见*.com/a/17881003/985949
  • 我猜是在数据库级别开发和维护,它会防止我或其他开发人员错误地添加新标签。例如,开发人员在将节点添加到数据库时可能会输入错误的标签。当数据库中已经有n个带有标签“Person”的节点时,他们可能会添加标签“Persons”的节点。这样,如果开发人员错误地尝试添加“Persons”类型的节点,则会显示错误消息“尚未定义该标签”
  • 就个人而言,我使用 Spring-Data-Neo4j 让标签集自动设置。您无法使用无模式数据库预先完成您期望的操作。如果开发人员能够在标签上犯错误......我无法想象他在价值观方面会犯什么样的错误......模式。你无法避免它。
  • 选择定义模式的一个重要好处在于底层图形数据库能够根据模式本身的知识优化查询。这种优化可以带来可观的性能提升。

标签: database neo4j graph-databases orientdb titan


【解决方案1】:

【讨论】:

  • 是的,这就是我要找的。 OrientDb 是否适用于 c#?我注意到有一些 nuget 解决方案可以解决这个问题,但找不到任何其他文档。
【解决方案2】:

Titan 也允许您这样做。

对第 5.5 节的原始帖子特别感兴趣:强烈建议明确定义所有架构元素并通过在 Titan 图形配置中设置 schema.default=none 来禁用自动架构创建。

【讨论】:

  • 是的,这就是我要找的。 Titan 是否与 c# 一起工作得很好?我注意到有一些 nuget 解决方案可以解决这个问题,但找不到任何其他文档。
  • 对于 Titan,您需要将 Titan 服务器用于非 JVM 环境。 s3.thinkaurelius.com/docs/titan/0.9.0-M2/server.html 服务器使用 WebSockets 或 REST。它基于Apache TinkerPop3
【解决方案3】:

您可以做的一件事是在开发者以图形格式(如模板?)输入之前为我定义它,例如,什么是节点、它的属性、关系......等等

【讨论】: