本文介绍如何用Python和Neo4j构建知识图谱,涵盖建模、数据加载与查询优化。核心在于利用图数据库的索引无关邻接实现高效多跳查询,优于SQL的多次连接。内容包括节点/关系建模原则、UNWIND批量加载、索引与约束设置、查询计划分析,以及结合向量搜索构建AI知识图谱的方法,并附完整可运行脚本。
> 本文是写作规划,不是可发布正文。拆解对象:属性图(property graph)存储与遍历引擎——以 Neo4j 5.x(record / aligned / block store)为主线,TinkerPop / JanusGraph、TigerGraph 作对照;Cypher / Gremlin 只写到「计划与…
本文介绍JanusGraph基于TinkerPop接口,将图数据存储于Cassandra等宽行后端,采用邻接表布局,边双写,事务非必然ACID,依赖后端一致性。对比Neo4j原生存储,JanusGraph牺牲局部性换取可扩展性,用vertex-centric索引应对超节点,适合已有宽表集群的场景。
本文比较六种图数据库引擎的架构差异,聚焦邻接布局、查询表面、事务、扩展和运维五轴。TigerGraph采用原生并行存储与MPP/BSP执行,JanusGraph依赖外置宽行图层,Neptune基于四元组索引和云共享存储,AGE映射PostgreSQL表,Memgraph支持内存与磁盘模式切换。文章强调机制定位而非性能排名,最终选型决策留待第16篇。
本文介绍Neo4j图数据库生产环境排障方法,核心是“三轴分流”:先判断慢查询属于计划基数(轴A)、存储I/O(轴B)还是锁/并发(轴C),再对症处理。文章强调超节点问题应优先优化建模与查询而非硬件,并给出内存三分(page cache、heap、OS)的配置与指标解读,以及锁死锁排查、慢查询固定流程和症状速查表。
本文总结图数据库选型与接口设计:何时用原生图引擎、GraphRAG边语义分级(L0-L3)及存储建议。核心观点:深多跳、邻接局部性、事务边场景倾向原生图;GraphRAG边多为可重建的L0-L1,权限审计边需强一致存储。向量管语义,图管可达,按边分级选型,避免一刀切。
本文为图数据库内核系列首篇,介绍属性图引擎在存储生态中的角色,对比行存、LSM、向量引擎与GraphRAG。重点阐述Neo4j的record与block存储格式、邻接代价模型、页缓存及Cypher计划边界,并规划16篇阅读路线,强调原生邻接布局对多跳查询性能的关键作用。
本文比较图数据库四种邻接布局(边表、CSR、指针链、Block内联)的代价模型,分析一次hop与k跳扩张的差异。核心观点:大O相同但常数、局部性、更新代价不同;幂律图超节点主导事故形态;选型需关注k、f、d_max和更新频率四个旋钮,而非品牌之争。
本文介绍Neo4j图数据库record存储引擎布局:节点15字节、关系34字节、属性41字节、关系组25字节,均采用定长记录加指针链表结构。稀疏节点直接扫描关系链,密集节点通过关系组按类型分桶。aligned为Community默认格式,block为Enterprise推荐格式。
本文介绍Neo4j图数据库的Block存储格式,采用128字节固定主块内联节点与关系数据,溢出时分层使用动态存储、dense B+树及huge存储。相比Record系指针链,Block减少指针追逐,提升局部性,支持更高实体上限,但空节点有固定空间开销。该格式为Enterprise默认,Community仍用aligned。
本文介绍Neo4j图数据库的page cache机制:页大小为8192字节,用于缓存磁盘上的图数据和原生索引。配置上建议显式设置server.memory.pagecache.size,并通过hit_ratio(应达98%以上)、usage_ratio、page_faults等指标监控健康度。Record格式易受随机指针颠簸影响,Block格式通过数据共置减少页访问,超节点则需建模优化。扩缓存只是优化手段之一。
本文介绍图数据库Neo4j的写入路径:创建关系时挂链或升dense,删除采用逻辑删除并复用ID,空间不立即归还OS。写放大影响读局部性,逼近阈值触发结构迁移,复用旧ID可能破坏缓存友好性。压实需用database copy工具。
本文介绍Neo4j 5的索引与约束机制。索引分四类:LOOKUP(标签/类型)、RANGE(属性范围)、TEXT(文本子串)、POINT(空间),用于加速查询起点选择,但不解决深度遍历爆炸问题。约束(唯一、存在、类型、KEY)保证完整性,但会带来写放大。过索引增加空间和写入成本,需谨慎设计。
本文介绍Neo4j图数据库中全文索引与向量索引的边界:两者均由Lucene驱动,不自动被Cypher规划器选用,需显式调用过程或SEARCH查询。全文索引用于分词匹配与打分,向量索引用于嵌入近邻搜索。内存上依赖OS缓存而非page cache,分数不可跨源比较,可与图拓扑扩展结合实现混合检索。
本文介绍图数据库Cypher计划中Expand算子家族:单跳Expand(All)生成邻居、Expand(Into)连接已知两端,变长路径需设上界防爆炸,Pruning优化仅需唯一终点,最短路径用双向BFS而非变长枚举。强调存储耦合、谓词下推及实操要点,如避免超节点扫描、量化路径剪枝等。
本文介绍Cypher查询计划与基数管理。规划器基于统计估计行数选择执行路径,但幂律图上平均度数失真,导致Estimated Rows低估实际行数,引发Expand爆炸。调优需用PROFILE对比真实Rows,通过DISTINCT、聚合、早LIMIT控制基数,而非依赖索引提示。
本文介绍Neo4j图数据库的事务与锁机制。默认隔离级别为读已提交,写锁自动获取,遍历数据不受保护。锁落在节点或关系上,dense节点建边时锁粒度更细。死锁是可重试的瞬时错误,需固定更新顺序。删除节点需先删关系。
本文介绍Neo4j集群高可用架构:服务器与数据库角色解耦,primary负责写并靠Raft多数确认,secondary异步复制用于读扩展。因果一致性通过书签保证跨成员读己之写。集群不改变单机隔离级别,默认仍为读已提交。
本文介绍图数据库内核系列文章,聚焦属性图存储与遍历。内容涵盖Neo4j的record/block格式、邻接代价模型、索引、Cypher计划及事务处理,并对比TinkerPop、JanusGraph等引擎。系列共16篇,已发布13篇,旨在帮助工程师理解图存储底层机制及选型,区分原生图引擎与关系库递归CTE的适用场景。
PostgreSQL 19于4月8日功能冻结,社区专注于测试和修复。新版本将支持图数据库、提供pg_plan_advice工具以及无锁表膨胀处理的REPACK功能,预计在9月/10月发布,并将举行PGConf.EU大会。
完成下面两步后,将自动完成登录并继续当前操作。