云主机iss怎么做网站,怎么做网站反向链接,贵州省建设局网站,Linux网站开发设计作者 | 穆琼责编 | 晋兆雨头图 | 付费下载于视觉中国随着知识图谱的发展#xff0c;图数据库一词被越来越多的提到。那么到底什么是图数据库#xff0c;为什么要用图数据库#xff0c;如何去建设一个图数据库应用系统#xff0c;图数据库与知识图谱到底是什么关系。今天为大… 作者 | 穆琼责编 | 晋兆雨头图 | 付费下载于视觉中国随着知识图谱的发展图数据库一词被越来越多的提到。那么到底什么是图数据库为什么要用图数据库如何去建设一个图数据库应用系统图数据库与知识图谱到底是什么关系。今天为大家揭开神秘面纱以Neo4j为例浅析图数据库相关技术。作者介绍穆琼 中国农业银行研发中心致力于AIOps的落地。图数据库简介谈到图数据库首先要聊聊“图”这里的图不是计算机视觉、图像处理领域的图而是图论中的图它由节点和节点间的线组成通常用来描述某些实体与它们之间的特定关系。下图就是一个典型的图示例某企业网络设备拓扑和报警管理应用方案的示意图。现实世界中的图无处不在社交领域人与人的关系挖掘、零售领域商品购买的关联推荐、金融领域的反欺诈反洗钱都是图技术的典型应用。但是图的存储在过去一直没有特别好的方案。历史的方案可以概括为两类第一类基于传统关系型数据库将图中的关系用外键或关联表来表示这种方式对于某些查询场景需要好几个昂贵的表连接增加了复杂性。在这种存储中业务数据与外键元数据混杂起来增加了开发和维护的成本。第二类采用键值或文档型的NoSQL数据库键值型如Redis、DynanoDB 等、文档数据库如MongoDB这些NoSQL都难以表示关联关系为技术人员带来了开发成本和理解上的壁垒。因此专门用于图的存储和查询技术是非常必要的。图技术根据应用方式的不同可以分为两个方向第一个方向是图数据库它用于图数据的存储和联机事务查询具备实时性面向OLTP支持CRUD和事务。第二个方向是图计算引擎它用于图数据的离线查询分析更适合海量数据的挖掘面向OLAP。图领域已经有很多的技术和产品下图截取自VLDB2019 keynote《Graph Processing: APanaromic View and Some Open Problems》除了其中所列之外还有很多其他的技术。图数据库有很多成熟的产品根据底层存储和处理引擎是否原生图数据库可以分为四类。为了便于后面理解图数据库处理图的优势我们解释一下这两个分类维度的含义。存储方式原生图存储数据存储模式为存储和管理图而设计为图进行过优化。非原生图存储将图数据序列化采用关系型数据库、面向对象数据库、或是其他通用数据存储。处理方式原生图处理使用免索引邻接关联节点在物理层面指向彼此这种方式不同于传统关系型数据库的树形全局索引为查询图的关联节点带来了巨大的性能优势。非原生图处理不采用免索引邻接保存关系。根据这两个维度图数据库产品可以分为四类Neo4j实践我们以Neo4j为例直观地感受一下图数据库的强大和便捷之处。Neo4j采用Cypher查询语言CQL进行数据的增删改查下面的Cypher语句创建了三个Person节点和他们之间的关注关系CREATE (Billy:Person {name:Billy,born:1990, sex:male})CREATE (Ruth:Person {name:Ruth,born:1989, sex:female})CREATE (Harry:Person {name:Harry,born:1992, sex:male})CREATE (Billy)-[:FOLLOWS]-(Harry)CREATE (Harry)-[:FOLLOWS]-(Billy)CREATE (Ruth)-[:FOLLOWS]-(Billy)CREATE (Ruth)-[:FOLLOWS]-(Harry)CREATE (Harry)-[:FOLLOWS]-(Ruth)
查询关注了Billy的人MATCH (Billy:Person{name:Billy})-[:FOLLOWS]-(followers:Person)RETURN followers
为Billy做个简单的好友推荐推荐策略是把Billy好友互关者关注的人推荐给他MATCH(Billy:Person{name:Billy})-[:FOLLOWS]-(friend:Person)-[:FOLLOWS]-(Billy:Person{name:Billy}),(friend)-[:FOLLOWS]-(newFriend)WHERE NOT(Billy)-[:FOLLOWS]-(newFriend)RETURN newFriend
上面的推荐查询得到Ruth。 可以看到相较SQL的关联查询Cypher查询的语法具有更强的语义性。Neo4j也提供了shortestPath方法来获取节点间的最短路径关系下面这个查询基于Neo4j官方提供的电影和演员数据我们的历史数据大多都存储在关系型数据库中neo4j也很好的支持了关系型数据表CSV文件的导入CSV文件的导入有两种方式1.直接用Cypher LOACCSVLOAD CSV WITH HEADERS FROMfile:///categories.csv AS rowCREATE (n:Category)SET n row
2.用neo4j-import工具更适用于数据量较大的场景支持并行、可扩展的CSV数据导入。 在查询性能优化方面Neo4j也做了较好的支持Cypher支持对节点的某个属性上创建索引使得检索数据效率更高但是跟关系型数据库类似索引同样会增加存储成本、影响写入效率。在用Cypher查询时我们也可以通过EXPLAIN或PROFILE对查询语句进行分析辅助查询调优。Neo4j监控工具可以记录和显示服务器的各项指标Neo4j提供了HTTP web界面实时查看监控数据包括存储容量、ID分配、页面缓存和事务数据。 Neo4j系统建设Neo4j开发Neo4j分别提供Java接口和REST API对应的使用Neo4j也有两种开发模式Java API嵌入式开发和HTTP API调用开发。Neo4j天然支持JavaSpring也提供了Spring Data Neo4j便于我们在Spring应用系统中使用Neo4j。Spring Data Neo4j除了提供Spring Data模块的实体映射、分页、事务等功能以外还针对Neo4j提供了以下附加功能支持Neo4j属性图模块支持Neo4j Lucence索引支持Neo4j Cypher查询CQLNeo4jTemplate Spring Data Neo4j体系结构如下图Spring Data Neo4j提供了不同的API来支持不同的场景下表给出了对应的Java类和其用法Spring Data Neo4j类用法GraphRepository用于执行basic Neo4j DB操作GraphTemplate类似其他Spring Data模块的Template是执行Neo4j DB操作的Spring模板CrudRepository用于使用Cypher查询语言CQL执行Neo4j CRUD操作PaginationAndSortingRepository用于执行Neo4j CQL查询结果的分页和排序 Neo4j集群搭建 考虑到系统实施时大规模生产环境和容错问题Neo4j企业版提供高可用集群和因果集群两种集群功能实现高可用性和水平读扩展有效提高系统整体性能、可靠性、灵活性和可扩展性。在使用图数据库集群时我们需要考虑集群的负载均衡提升吞吐量并减少延迟时间。Neo4j自身没有负载均衡功能需要依赖网络基础设施的负载均衡能力。以下是三种我们常用的负载均衡方式1.分离读写流量将绝大部分写入操作直接在集群主节点上进行将读请求和写请求完全分离开通过负载均衡器将写流量定向到主节点读流量平衡地分散到整个集群避免写操作影响查询效率。2.高速缓存分片这种方式利用了主存储器中的数据查询执行最快如下图所示高可用集群中的节点实例将图的部分数据放在自己的主存储器负载均衡器将请求路由到对应的节点实例上提升查询效率。3.集群实例节点读取自己的写入减少查询开销。 知识图谱与图数据库图数据库虽然强大且易用但是它并不是完美的适用于所有场景。图数据库可以存储海量数据但并不适合直接用来进行海量数据的分析计算而更适合用来进行某个实体及其关联关系的查询。因此仅靠图数据库显然无法解决图计算领域的所有问题在知识图谱的构建和应用方面还有很多需要利用其他图计算技术来解决的问题。下图是一个典型的图计算技术架构包括图数据建模、存储系统和图数据计算三个部分。图数据建模对于关系型数据库的数据关系和实体已知建模成图数据相对简单。但是对于文本这样的非结构化数据将其建模成为图数据需要应用自然语言处理、机器学习技术来解决知识抽取、知识融合和知识推理等问题。斯坦福大学Infolab实验室开源的DeepDive提供了知识抽取的框架是构建知识图谱的利器。 存储系统图数据有多种存储方式图数据库当然是最适应图的关系存储的但在不同的应用场景下也可以考虑将图数据以RDF三元组、关系型数据库、ES或其他NoSQL方式进行存储。图数据应用在构建好的图数据基础之上通过图计算引擎对海量图数据进行离线的计算分析针对不同的应用场景也可以在内存处理或工作存储中对图数据进行查询分析。图数据库非常适用于图数据的存储和实时查询是知识图谱的基石但它并非知识图谱的全部。在应用时我们需要针对具体的场景去进行选型结合不同的图计算技术进行分析计算。 目前图数据库产品很多国内各大互联网公司如阿里、腾讯等也自研了自己的图数据库图数据库未来能否像关系型数据库一样有统一的查询语法目前还是一个未知数。但可预见的是随着数据的爆炸式增长在追求数据驱动运营和决策的潮流下图数据库在社交关系、实时推荐、主数据管理、在线反欺诈、IT网络管理、地理信息系统等领域都将占据重要的一席之地。 更多阅读推荐云原生应用Go语言你还在考虑的时候别人已经应用实践一文告诉你雾计算与云计算的区别及对物联网的价值你可能也会掉进这个简单的 String 的坑教你如何用 Python 三行代码做动图Ethereum2.0深入了解Lego Money、Sharding、PoS和TPS的真相