在众多不同的数据模型里,关系数据模型自上世纪80年代就处于统治地位,如Oracle、MySQL、PostgreSQL和MSSQL,也被称为关系数据库管理系统(RDBMS)。虽然在数据库排行榜上,关系型数据库仍然占据主要位置,但是近十年来随着社交网络、电子商务逐步成熟,网络和电商们需要对用户的人际关系、购买行为进行分析,并挖掘出用户潜在的人际关系、喜好商品,而关系型数据库在这样大数据量和多服务器上的问题就暴露出来了,于是工程师们开始大量使用图理论相关的数据挖掘算法,图形数据库(Graph Database)便从实验室慢慢走进实际的软件工程项目中。这带来的结果是,工程师们发现使用图形数据库来存储和计算海量数据更为高效和方便,于是极大地推动了图形数据库的发展。
图形数据库
图形数据库将社交关系等数据描述为点(Vertex)和边(Edge)及他们的属性(Property),每一张图(Graph)都是一个结构化数据。在图形数据库里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。通俗地讲,图形数据库就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。
图1曲线表示各种数据存储类型在最近几年的发展情况,从中可以明显地看到基于图的存储方式在整个数据库存储领域的飞速发展。
而且,在目前比较流行的基于图存储的数据库排名中(如图2所示,截至2017年1月),可以看出,Neo4J在图形存储领域里占据着第一、且遥遥领先的地位。作为当前世界上最先进的图形数据库,Neo4J如今已成为许多互联网的首选。
Neo4J
定义
Neo4J是开源的基于Java实现、完全兼容ACID、高性能的NOSQL图形数据库,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,它将结构化数据存储在网络上而不是表中。
Neo4J有三种版本:社区、企业、政府。社区版(community version)以GPLv3的许可在Github上开源,只能运行在一个节点上,不支持集群和热备份;企业版同时遵循AGPLv3和商业许可,它在社区版基础上增加了包括高可用性(High Availability)、聚类、热备份、全天候支持等特性;政府版扩展了企业版,增加了政府特定服务,包括FISMA相关认证支持。同时,Neo4J的社区非常活跃,围绕它有非常多的项目,包括RESTAPI绑定,空间数据库支持等。
结构与特性
Neo4J的图中包含两种基本的数据类型:Nodes(节点)和Relationships(关系),其中Nodes和Relationships包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。并且Neo4J对于图的存储都是经过特别优化的,不像传统数据库一条记录一条数据的存储方式,Neo4J的存储方式是:节点的类别,属性,边的类别,属性等都是分开存储的,大大有助于提高图形数据库的性能。如图3所示。
按照上面所介绍的结点/关系模型组织数据,Neo4J拥有以下一系列特性:
1.对事务的支持。Neo4J强制要求每个对数据的更改都需要在一个事务之内完成,以保证数据的一致性。
2.强大的图形搜索能力。Neo4J允许用户通过Cypher语言来操作数据库。该语言是特意为操作图形数据库设计的,因此其可以非常高效地操作图形数据库。同时Neo4J也提供了面向当前市场一系列流行语言的客户端,以供使用这些语言的开发人员能够快速地对Neo4J进行操作。除此之外,一些项目,如Spring Data Neo4J,也提供了一系列非常简单明了的数据操作方式,使得用户上手变得更为容易。
3.具有一定的横向扩展能力。由于图中的一个结点常常具有和其他结点相关联的关系,因此像一系列Sharding解决方案那样对图进行切割常常并不现实。因此Neo4J当前所提供的横向扩展方案主要是通过Read Replica进行的读写分割。反过来,由于单个Neo4J实例可以存储几十亿个结点及关系,因此对于一般的企业级应用,这种横向扩展能力已经足够了。
工作原理
一个Neo4JHA集群的协作运行,协调行为是通过zookeeper完成的。
1.当一个Neo4JHA实体开启时将去连接协调器服务(zookeeper)注册其本身并询问“谁是主机(master)?”。如果某个机器是主机,新的实体将以从机(slaver)开启并连接到主机(master)。如果机器开启时为第一个注册或者通过主机选择算法应该成为主机,将会作为主机开启。
2.当从一个从机上执行一个写入的事务时,每个写入操作将与主机同步(主机与从机将被锁定)。当事务提交时首先存在于主机上。当主机事务提交成功,从机上的事务也会被提交。为确保一致性,在执行写入操作前从机与主机同步必须是最新的。这是建立主机与从机之间的通信协议,所以如果需要,更新将会自动发生。
3.可以通过在包含ha.slave_coordinator_update_mode=none配置参数的配置文件中将数据库实体设置成只作为从机。此实体虽然在系统故障恢复选择时将不可能再成为主机,然而此从机的行为与其他所有从机都一样,含有永久写入到主机的能力。
4.当从主机上执行写入操作,它将与在普通的嵌入模式中执行一样。此时主机将不会推送更新消息到从机。相反,从机可以配置一个拉取消息的时间间隔。没有选举,更新操作仅仅只会发生在从机上,任何时候都将同步一个写入到主机。
5.将所有写入操作通过从机执行的好处是数据将备份到两台机器上。这是建议的,避免当新选主机时可能造成回滚失败。
6.当某台Neo4J数据库服务不可用时,协调器(coordinator)将探测到并从集群中删除掉。当主机宕机时,新的主机将自动被选择出来。一般地,一个新的主机被选定并在几秒钟内启动,在这段时间将不会执行任何写入操作(写入将抛出异常)。当某台机器从故障中恢复了,将会被自动重新连接到集群中。如果新的主机被选择并在旧的主机恢复前执行改变,将会有两个不同版本的数据。旧主机将移除分支数据库并从新主机下载一个全版本的数据。
Neo4J应用场景
网络与数据管理
现在网络和数据管理变得越来越普遍和复杂。如果是传统的数据管理,则需要准备逻辑和物理数据模型。逻辑数据模型描述了数据层的业务需求,物理数据模型指定数据将如何在数据库中持久化。在关系设计中,需将一个公共结构应用于实体的每个实例。比如,有一个客户实体,所有这些实体共享相同的属性或属性集,这意味着必须在创建数据库和导入数据之前发现并记录所有要支持的属性。而在图形数据库中,逻辑模型就是物理模型,甚至可以把图模型看作服务模型。因为逻辑模型是唯一的模型,从数据到数据库,比建立关系的主数据库解决方案,需要更少的时间和更少的资源(人员、架构师、DBA和开发人员)。在大部分情况下,图形数据库的潜力是显而易见的,比如社交媒体、交友网络,实际网络技术。在这种情况下,用户和事物之间的关系是关键的数据结构,即是所谓的网络。作为图形数据库排名第一的Neo4J,便是社交网络和主数据库的最佳技术。
推理与推荐引擎
推理能力是人类智能的重要特征,使得人们可以从已有的知识中发现隐含的知识。一般的推理往往需要一些规则的支持,刚好Neo4J提供了这样一个可能。工程师可以将用户的消费记录、行为记录、网上的浏览记录、检索记录等整合到Neo4J里,Neo4J还提供新数据源的快捷添加方式,然后通过规则引擎,针对实体属性或关系进行挖掘,Neo4J便可以帮助人们发现未知的隐含关系、探索相似度、分析复杂关系中存在的特定的潜在风险,甚至是阻止诈骗团伙,形成一种链式的预测。
构建实时推荐引擎是Neo4J最常见的用途之一,也是Neo4J强大而易用的用途之一。在互联网时代,营销手段多种多样,但不管有多少种方式,都离不开一个核心,即分析用户和理解用户。因为Neo4J可以帮助工程师结合多种数据源去分析实体之间的关系,从而对用户的行为有更好的理解。比如一个公司的市场经理用Neo4J来分析用户之间的关系,去发现一个群体组织的共同喜好,从而可以有针对性地对某一类人群制定社会关系、营销、买卖、供应链和物流等策略。因此,只有理解用户的需求,才能更好地去做推荐,Neo4J便是最好的实现技术之一。
智能搜索与可视化
基于Neo4J,系统将可以提供智能搜索和数据可视化的服务。智能搜索的功能类似于图形数据库在Google,Baidu上的应用。也就是说,对于每一个搜索的关键词,Neo4J将返回更丰富,更全面的信息。比如搜索一个人的身份证号,Neo4J的智能搜索引擎可以返回与这个人相关的所有历史借款记录、联系人信息、行为特征和每一个实体的标签(比如黑名单,同业等)、属性等等。另外,可视化可以非常直观地呈现出复杂的信息,使得用户对隐藏信息的如何形成一目了然。例如搜索马云,除了马云自身的信息外,还可关联出马云的家庭、马云的妻子、马云的企业等与搜索关键字相关的信息。也就是说搜索引擎的图形数据库数据量越庞大,与某关键字相关的信息将越多,再通过分析用户的特定条件,计算出用户最可能想要看到的信息,从而大大提高搜索的质量和广度。
Neo4J与机构知识库的结合
主数据库管理
以DSpace为例,合集、专题、条目、元数据字段之间的关系相对复杂,如果数据量不断增加,它们之间的关系复杂度将会呈现指数级增长。利用Neo4J代替关系数据库管理学术成果信息,机构知识库将可以挖掘和推出更多的增值服务。
搜索与展示
Neo4J提供了两种便利的方式:一种是深度搜索,第二种是广度搜索。也提供了两种搜索算法,一种是A*算法,另一种是dijkstra算法。这些使编程人员的工作效率得到大大提高,还减少了项目时间、复杂性和成本。只要用户在查找学术资料时提供一个简单的检索词或人名,通过Neo4J的图驱动推荐功能,系统就可以推荐给用户与检索词相关的文章、学科,与人名相关的作者、相关研究领域的其他作者等,还可以展示与检索词或人名相关的主体信息,比如一个机构的简介、地理信息等等。
去重
因为一篇学术成果在机构知识库中的描述字段比较多,所以实际相同的两条数据可能会因为若干字段的错误或操作失误而被误认为是两篇文章。如果出现这种情形的概率增大,随着时间的增长,机构知识库系统中冗余的数据将会越来越多,统计数据也不准确,会给学术成果管理带来诸多烦恼。利用Neo4J的相似度推荐功能,系统可以通过两篇看似不同的文章的学术关系来判断它们是否为同一篇文章,进一步推送给管理员或作者确认。
辅助认领
一篇文章的作者会有多个,另外可能会有同名或者写法不规范的情况。利用Neo4J的社交推荐功能,系统可以通过这篇文章的作者、单位、学科、领域等学术关系,推断出文章的所有“真实”作者,并发送消息给这些作者进行认领或纠正学术成果的归属关系。
领域伙伴
一般而言,在检索、浏览、关注、打分方面相似的用户在其他方面也会相似。基于在学科或相关研究领域方面的行为相似度,利用Neo4J的聚类推荐功能,系统可以给学者推荐同样关注或者擅长某个学科或领域的合作伙伴。
随着社交网络、电商平台呈爆炸性发展,各大互联网巨头越来越看重图形数据库,它势必将在学术界和工业界得到越来越多的投入和应用。作为其中的一员,Neo4J已经成为目前业界最流行的图形数据库,呼声也最为高涨。
笔者认为,随着学术成果数据的逐年增长,机构知识库应该考虑与Neo4J进行结合,才能让学术成果得到更好的交流和利用。
当然,图形数据库是这几年才兴起的,整体还不是很完善。Neo4J在数据插入、超大节点处理、内存分配等方面还有一些问题,希望新的版本能够得到改进。另外,针对Neo4J的缺点,也可以考虑尝试OrientDB、Titan、ApacheDrill、ArangoDB等其他图形或混合模式数据库。
(作者单位为北京大学图书馆)
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。