本研究对 GraphDB (Neo4j) 和 RDB (PostgreSQL) 在查询代表脊叶网络架构的数据时的搜索速度进行了基准测试。 结果表明,对于具有大量节点和显着深度的数据集,GraphDB 的性能优于 RDB。
测试环境使用 Neo4j(版本 5.26.0)和 PostgreSQL(版本 15)的 Docker 容器。 Docker Compose 文件如下:
<code class="language-yaml">version: '3' services: postgres: image: postgres:15 ports: - 5433:5432 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres neo4j: image: neo4j:5.26.0 ports: - 7474:7474 - 7687:7687 adminer: image: adminer restart: always ports: - 8080:8080</code>
基于脊叶和虚拟化架构的变化,测试了三种场景:
数据库之间的数据建模不同:
has_parent
和 has_child
关系。 场景 1 的示例查询:<code class="language-cypher">CREATE (ssw1: SpineSwitch {name: "ssw1"}) CREATE (ssw2: SpineSwitch {name: "ssw2"}) ... CREATE (ssw1)-[:has_child]->(lsw1) ...</code>
nodes
和 relationships
。<code class="language-sql">CREATE TABLE nodes ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, type VARCHAR(50) NOT NULL ); CREATE TABLE relationships ( id SERIAL PRIMARY KEY, parent_id INT NOT NULL, child_id INT NOT NULL, relationship_type VARCHAR(50) NOT NULL, FOREIGN KEY (parent_id) REFERENCES nodes (id), FOREIGN KEY (child_id) REFERENCES nodes (id) );</code>
搜索查询旨在查找从特定服务(“srv1”)到主干交换机的路径。 带有 Neo4j 的 GraphDatabase
驱动程序和 psycopg2
的 Python 脚本用于查询执行和计时。
不同场景下的搜索速度对比总结如下:
结果表明,对于具有大量节点和相当深度的数据集,GraphDB 的效率显着提高,这与图数据库在遍历复杂关系方面的固有优势相一致。 对于较小的数据集,性能差异不太明显。
此外,与 PostgreSQL 中等效 SQL 查询的复杂性相比,Neo4j 中 Cypher 查询的简单性是需要考虑的关键因素。 这种查询复杂性的差异导致了在处理类图数据结构时对 GraphDB 的整体偏好。
以上是CMDB 的 GraphDB的详细内容。更多信息请关注PHP中文网其他相关文章!