1

使用普通的“图形数据库”,数据被分解为节点和边,并且连接之间没有太多的限制/模式。有了这个,它似乎很适合对关系相对一致的简单图形进行建模——有演员和工作人员的电影;具有 IP 和设备的计算机网络;具有用户和联系的社交网络;等等

有没有可以更专业的类图数据库?例如,能够对电路之类的东西进行建模,其中每个组件都有一种“模式”或明确定义的输入和输出——即,电阻器有两个连接并具有各种属性:

在此处输入图像描述晶体管具有三个连接并具有各种属性等。

我不是在询问特定的电路模拟器,例如https://www.falstad.com/circuit/circuitjs.html,而是更多关于是否有可能在任何图形(或伪图形)数据库中建模和执行非常具体,网络中定义明确的关系,例如电路设计。

4

3 回答 3

1

绝对有可能。

我一直在用 Neo4j 解决这个问题,结果就是Restagraph。它提供了一个 REST API,它在对数据库的任何更新上强制实施模式,我已将其打包为 Docker 映像。

到目前为止我还没有真正推广它,因为它最近才成熟到可以自己使用,我确实需要改进文档。但是,如果您尝试一下,我很想听听您的任何反馈。

于 2020-12-13T10:25:45.783 回答
0

TLDR:一般来说是的,但这取决于。

这是一个非常广泛的问题,所以让我分解一下。

虽然谈论所有图形数据库(它们不像 SQL 数据库那样标准化——反过来也不是很标准化)有点夸大其词,但请对这个答案持保留态度:是的,这是可能的。

与在 SQL 数据库中一样,您通常可以设置要在数据的任何更改被持久化之前检查的约束。

大多数图形数据库都包含类似于“类型”的内容,类似于 SQL 数据库中的表表示的内容。有些允许将关系限制为仅针对特定类型,因此您可以将使用 CAN 总线和 I2C 总线的节点之间的关系限制为特定类型。

如果数据库不提供这些机制,通常可以将关系限制为模型中特定键和值的存在。再举一个电路示例:想象一个基于节点的系统,它具有类型化的输入和输出——int基于输出的输出只能连接到int基于输入,float基于输出只能连接到float基于输入,等等。然后你可以将字段output_type和添加input_type到节点并约束值之间的关系。

只要您添加了编写(类似 SQL 的存储)过程的能力,您就可以编写非常复杂的数据完整性约束。

所以,虽然可能,但问题是,如果你应该这样做。

您实际上想要在数据库中放入多少逻辑是一个长达数十年的激烈争论。在您的应用程序架构中的某个时刻,您将不得不检查您正在处理的数据的有效性。处理数据库本身的数据一致性通过应用程序和数据库之间的多次往返解决了很多竞争条件或性能问题,如果在应用程序层进行一致性检查,就会发生这种情况。

将大量逻辑放入数据库会严重限制您切换数据库的能力(“供应商锁定”),可能会导致应用程序层和数据库之间的代码重复,并在两个(或更多)层之间喷洒您的逻辑您的架构(这使得发现错误变得更加困难,引入了时间耦合,并且可能重新引入竞争条件和性能问题,您必须再次使用事务)。

我个人的看法与史蒂夫·沃兹尼亚克(Steve Wozniak)类似——将您的数据库视为另一种服务。如果该服务可以为您提供确保数据完整性所需的一切,那么直接使用数据库可能是个好主意。但如果这增加了我之前提到的问题,最好在数据库和业务逻辑之间放置一层。

于 2020-12-21T10:12:11.243 回答
0

Objectivity/DB 是使用模式的对象/图形数据库。你绝对可以按照你的提议去做。它支持复杂的对象定义,包括类型继承,并且具有类似于 Cypher 的完整图形/导航查询语言。www.objectivity.com

于 2021-02-19T15:29:05.410 回答