基于图数据库的在线族谱编录系统:PostgreSQL与Neo4j对比分析

需积分: 12 2 下载量 53 浏览量 更新于2024-09-12 收藏 524KB PDF 举报
"这篇文章对比了基于图数据库的在线族谱编录系统与传统关系数据库(如PostgreSQL)在处理族谱数据上的优劣。作者姜洋、彭智勇和彭煜玮提出了一种使用B/S架构和图数据库Neo4j的系统,旨在解决现有族谱系统中的数据共享、扩展性和效率问题。他们通过实验证明,Neo4j在存储和查询效率上优于PostgreSQL,尤其是在处理复杂的亲属关系查询上。" 正文: 在当前的信息化时代,族谱系统的数字化和网络化已成为趋势。然而,传统的基于关系数据库的系统在处理族谱这类具有复杂图形结构的数据时,往往面临数据共享度低、扩展性差和编录效率低的问题。针对这些问题,本文提出了一个创新的解决方案——基于图数据库的在线族谱编录系统。 这个系统采用浏览器/服务器(B/S)架构,允许多人在线协同工作,显著提升了数据录入的效率。B/S架构使得用户无需安装特定软件,只需通过浏览器即可访问和编辑族谱数据,方便了多地、多人的协作。同时,系统选择数据库作为数据存储介质,实现了数据的集中管理和高效检索,增强了数据的共享性。 关键在于,族谱数据天然地呈现出图的结构,人物之间的亲缘关系可以用节点和边来表示。因此,该系统采用了图数据库Neo4j进行数据管理。图数据库的优势在于其对复杂关系的高效存储和查询,能更好地适应族谱数据的特性。与关系型数据库PostgreSQL相比,Neo4j在存储空间上节省了大约50%,这意味着更小的存储成本和更高的存储密度。 在性能测试环节,研究人员使用约20万条刘氏族谱数据,对比了Neo4j和PostgreSQL在人物后代查询、祖先查询、亲缘关系查询以及后代性别统计等常见操作中的响应时间。实验结果显示,Neo4j的平均响应时间分别仅为PostgreSQL的20%、80%、16%和15%,这意味着在处理族谱数据的查询时,Neo4j表现出显著的性能优势。 这些结果证实了基于图数据库的在线族谱编录系统在处理大量族谱数据时的高效性,并且支持多用户同时在线编录,从而提供了一个理想的解决方案,尤其适合于需要处理复杂关系和大量数据的家族历史研究。这种技术的应用不仅能够提升数据处理的效率,还能为族谱的数字化和传承打开新的可能,对于推动族谱研究的现代化进程具有积极意义。 关键词:族谱;数字化;浏览器/服务器(B/S)架构;图数据库;查询性能 中图分类号:TP319;TP311 文献标志码:A

File "main.py", line 66, in <module> create_kg_by_neo4j(entity_json['N_RPA_PROJECT'][0]['ABSOLUTE_PATH'], is_create_neo4j) File "D:\IdeaProjects\domain-asset-management-platform\Asset_import_code\neo4j_kg.py", line 64, in create_kg_by_neo4j set_node(absolute_path) File "D:\IdeaProjects\domain-asset-management-platform\Asset_import_code\neo4j_kg.py", line 90, in set_node results_hp = session_hp.run(query[:-3]) File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\work\session.py", line 311, in run self._auto_result._run( File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\work\result.py", line 166, in _run self._attach() File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\work\result.py", line 274, in _attach self._connection.fetch_message() File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\io\_common.py", line 180, in inner func(*args, **kwargs) File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\io\_bolt.py", line 808, in fetch_message res = self._process_message(tag, fields) File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\io\_bolt3.py", line 412, in _process_message response.on_failure(summary_metadata or {}) File "D:\Program Files\Python38\lib\site-packages\neo4j\_sync\io\_common.py", line 247, in on_failure raise Neo4jError.hydrate(**metadata) neo4j.exceptions.CypherSyntaxError: {code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input 'I': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't', UTF16 or UTF32 (line 1, column 113 (offset: 112))

2023-06-08 上传