深圳网站建设luony,免费开源的企业建站系统,高端移动网站开发,成品源码1277目录
一、neo4j介绍
二、windows安装启动neo4j
2.1下载neo4j
2.2 解压文件
2.3 启动neo4j
三、neo4j基础操作
3.1 创建结点和关系
3.2 查询
3.3 更改
3.4 删除
四、技术血缘Demo实现
4.1 构建节点对象
4.2 构建存储对象
4.3 创建有属性关联关系
4.4 最后是图结果…目录
一、neo4j介绍
二、windows安装启动neo4j
2.1下载neo4j
2.2 解压文件
2.3 启动neo4j
三、neo4j基础操作
3.1 创建结点和关系
3.2 查询
3.3 更改
3.4 删除
四、技术血缘Demo实现
4.1 构建节点对象
4.2 构建存储对象
4.3 创建有属性关联关系
4.4 最后是图结果
五、总结 前言对于大公司或大部门团队之间相互合作、中间件的共同使用技术之间细节是不透明的遇到异常问题时定位排查困难如何清晰管理技术团队、中间件、数据之间的血缘关系这成为技术、产品、数据开发等人员的一个需求。
一、neo4j介绍 Neo4j 是一种开源的图数据库管理系统专注于存储和处理图结构数据。图数据库是一种专为处理图形和网络结构而设计的数据库其中的数据以节点和边或称关系的形式组成。Neo4j 提供了一种直观而高效的方式来表示和查询复杂的关系数据使得它特别适用于需要处理强关联和复杂网络结构的场景。
以下是 Neo4j 的主要特点和功能
图数据库模型 Neo4j 使用图数据库模型其中的数据被组织成节点和关系的网络。节点表示实体关系表示实体之间的关联而节点和关系都可以包含属性。Cypher 查询语言 Neo4j 使用 Cypher 查询语言这是一种专门用于图数据库的查询语言。Cypher 提供了一种直观且强大的方式来查询和修改图数据支持模式匹配、路径查询、聚合等操作。性能优化 Neo4j 通过采用类似索引结构的存储引擎可以快速地执行复杂的图查询。它还支持深度优先和广度优先的图遍历以及通过索引快速查找节点和关系。ACID 事务支持Neo4j 提供 ACID原子性、一致性、隔离性、持久性事务支持确保数据库的数据一致性和可靠性。灵活的数据模型 Neo4j 的数据模型非常灵活可以轻松地表示多对多、多对一、一对多等各种关系。这使得它在处理复杂网络结构和强关联数据时非常强大。支持图算法 Neo4j 提供了一系列内置的图算法如最短路径、广度优先搜索、社交网络中的社区发现等帮助用户进行更复杂的图分析。可视化工具 Neo4j 提供了直观的可视化工具使用户能够直观地查看和理解图数据的结构。这有助于开发人员和分析师更好地理解数据和关系。社区和生态系统Neo4j 拥有一个活跃的开源社区提供了大量的文档、示例和插件。此外它还有丰富的生态系统包括各种工具和驱动程序与其他数据存储和处理系统集成。 Neo4j 在许多应用领域中得到广泛应用包括社交网络分析、推荐系统、生物信息学、网络安全分析等。其图数据库的模型和查询语言使其成为处理复杂关系数据的强大工具。
二、windows安装启动neo4j
2.1下载neo4j
1.从官网下载https://neo4j.com/download/
2.直接获取资源包上手推荐https://dist.neo4j.org/neo4j-community-3.5.30-windows.zip
2.2 解压文件
点击解压 2.3 启动neo4j 在neo4j的bin目录下运行CMD 启动服务neo4j.bat console 在页面登录链接http://localhost:7474/
默认账号密码一般默认的是:用户:neo4j, 密码:neo4j;登陆后重新设置密码如123456
UI页面 三、neo4j基础操作
有四个基础概念
节点标签属性关系
3.1 创建结点和关系
创建结点
3.1.1创建只有一个标签没有属性的节点
语法CREATE (node-name:label-name)
示例CREATE (m:sdk)
注解()里”:“前第一个”m“是结点别名:后第二个sdk是结点标签别名可以随意写标签固定。
3.1.2创建一个有属性的节点
语法CREATE ( node-name:label-name { key:Value })
示例create (mobile:sdk {name:name1})
注解{}里是属性以json格式展示。
3.1.3创建多个标签到节点
语法CREATE (node-name:label-name1:label-name2.....:label-namen)
示例CREATE (m:sdk:usercode {name:name1})
注解以上创建了一个当前别名为m,标签为sdk和usercode,属性namename1的结点
创建关系
3.1.4各两个新结点创建无属性关系
create(m:sdk{type:SDK})-[r:write]-(n:api{name:lxApi})
return m,r,n
3.1.5给两个存在节点创建有属性关系
match(m:sdk{type:SDK})
match(n:api{name:lxApi})
create(m)-[r:upZip]-(n)
return n,m,r
3.2 查询
从数据库获取有关节点和属性的数据从数据库获取有关节点关系和属性的数据
MATCH检索Return返回信息
通过标签查询
语法MATCH(node-name:label-name)
示例示例MATCH (m:sdk) return m
通过标签属性查询
语法MATCH(node-name:label-name{filed:value1})
示例示例MATCH (n:sdk{name:name1}) eturn n
3.3 更改
添加标签
match (m:sdk{name:name1})
SET m:sdk:user
RETURN m;
添加属性
match (m:sdk{name:name1})
set m.userNameuser1
return m
3.4 删除
通过id来删除
match(n) where id(n)86
delete n
通过属性来删除
match(n:sdk{name:name1})
delete n
通过标签来删除
match(n:sdk)
delete n
删除节点关系再删除节点
match(n) where id(n)34
match(m) where id(m)30
match(n)-[r:write]-(m)
delete r
删除结点属性
MATCH (n:sdk{name:lxApi})
remove n.name
return n
删除结点标签
match(n:sdk{name:name1})
remove n:userName
return n
删除节点和节点关联关系
MATCH (s:sdk{name:name1})
DETACH DELETE s;
删除所有节点
MATCH (n)
DETACH DELETE n
删除所有关系
start rrelationship(*) delete r;
四、技术血缘Demo实现
本次技术血缘demo涉及三个团队,三个中间件用neo4j图数据库构建技术血缘关系。
通过SDK采集移动端APP的数据内部API用于管理采集服务最后依次存储到HDFS、Kafka、ES。
4.1 构建节点对象
1.业务服务对象创建
构建采集节点SDK
create(m:sdk:mobile{name:yzSdk,type:SDK,message:驿站SDKapp消息采集} )
create(m:sdk:mobile{name:jscSdk,type:SDK,message:驾驶舱SDKapp消息采集})
create(m:sdk:mobile{name:xcSdk,type:SDK,message:星辰SDKapp消息采集})
create(m:sdk:mobile{name:xzSdk,type:SDK,message:行者SDKapp消息采集})
查询sdk节点 MATCH (e:sdk) RETURN e 2.构建采集API管理对象数据节点
create(n:api:xlp{name:lxApi,type:api,message:离线API提交zip包存储元数据到kafka})
create(n:api:xlp{name:ssApi,type:api,message:实时API上传实时数据到kafka})
2.1构建配置索引接口节点
create(n:api:xlp{name:configApi,type:api,message:配置索引将消息写入不同索引库})
查询Api节点MATCH (n:api) RETURN n 4.2 构建存储对象节点
构建hdfs存储对象
create(s:hdfs:xlp{name:hdfs_file,hosts:ipList,type:hdfs,message:移动端离线上传zip包hdfs存储地址})
构建Kafka元数据存储Topic
create(s:kafka:xlp{topic:id_metadata_info,hosts:ipList,type:kafka,message:移动端离线上传zip包元数据信息})
构建kafka存储Topic
create(s:kafka:xlp{topic:XLP_MOBILE_LOG,hosts:ipList,type:kafka,message:星洲kafka集群Topic,存储移动端解压数据})
create(s:kafka:xlp{topic:xlp-log-body,hosts:ipList,type:kafka,message:星洲kafka集群Topic,存储移动端实时上传数据})
create(s:kafka:xlp{topic:id_m_crash,hosts:ipList,type:kafka,message:星洲kafka集群Topic,存储移动端实时上传崩溃数据})
查询Kafka存储节点MATCH (s:kafka) RETURN s 构建ES存储索引
create(s:es:xlp{index:id_m_1000*,hosts:ipList,type:es,message:星洲ES集群索引,存储移动端详情数据})
create(s:es:xlp{index:xlp_dev_appid_version_brand_record,hosts:ipList,type:es,message:星洲ES集群索引,存储app指标分析结果})
create(s:es:xlp{index:id_m_user_device_*,hosts:ipList,type:es,message:星洲ES集群索引,存储用户分析指标结果})
create(s:es:xlp{index:id_m_crash_*,hosts:ipList,type:es,message:星洲ES集群索引,存储移动端崩溃日志})
create(s:es:xlp{index:xlp_mobile_message_id_*,hosts:ipList,type:es,message:星洲ES集群索引,存储移动端崩溃message大字段信息})
create(s:es:xlp{index:id_network_*,hosts:ipList,type:es,message:移动端上传网络详细})
create(s:es:xlp{index:id_m_1000*,hosts:ipList,type:es,message:移动端上传用户登录时长详情增加UsedTime字段})
create(s:es:xlp{index:id_m_crash*,hosts:ipList,type:es,message:移动端上传崩溃详情索引})
ES存储对象MATCH (e:es) RETURN e 构建处理对象(Flink)
create(f:flink:xlp{name:UnZipTask,type:flink,message:解压zip读kafka,从HDFS获取zip解压存入Kafka})
create(f:flink:xlp{name:MobileToEs,type:flink,message:读kafka,分发数据到不同索引})
create(f:flink:xlp{name:UserAnalToEs,type:flink,message:读topic,计算用户指标结果存入es})
create(f:flink:xlp{name:fDevAnalToEs,type:flink,message:读topic,计算app指标j结果存入es})
create(f:flink:xlp{name:ssMobileToES,type:flink,message:读实时topic分发结果到es})
查询Flink任务节点MATCH (f:flink) RETURN f 4.3 创建有属性关联关系
4.3.1离线上传对象关联
match(m:sdk{type:SDK})
match(n:api{name:lxApi})
create(m)-[r:upZip]-(n)
return n,m,r
4.3.2实时上传数据关联
match(m:sdk{type:SDK})
match(n:api{name:ssApi})
create(m)-[r:toLineData]-(n)
return n,m,r
4.3.3 离线上传处理关联
记录元数据
match(n:api{name:lxApi})
match(h:kafka{topic:id_metadata_info})
create(n)-[r:mark]-(h)
return n,h,r
上传zip包
match(n:api{name:lxApi})
match(h:hdfs{name:hdfs_file_name})
create(n)-[r:mark]-(h)
return n,h,r
match(k:kafka{topic:id_metadata_info})
match(h:hdfs{name:hdfs_file_name})
create(k)-[r:relation]-(h)
return k,h,r
match(k:kafka{topic:id_metadata_info})
match(h:hdfs{name:hdfs_file_name})
create(k)elation]-(h)
return k,h,r
4.3.4 flink解压关联
match(k:kafka{topic:id_metadata_info})
match(f:flink{name:UnZipTask})
create(k)-[r:read]-(f)
return k,f,r
match(h:hdfs{name:hdfs_file_name})
match(f:flink{name:UnZipTask})
create(f)-[r:read]-(h)
return h,f,r
4.3.5 存储kafka关联
match(f:flink{name:UnZipTask})
match(k:kafka{topic:XLP_MOBILE_LOG})
create(f)-[r:read]-(k)
return k,f,r
4.3.6任务解析关联
UserAnalToEs 、fDevAnalToEs
match(k:kafka{topic:XLP_MOBILE_LOG})
match(f:flink{name:UserAnalToEs})
create(k)-[r:read]-(f)
return k,f,r
match(k:kafka{topic:XLP_MOBILE_LOG})
match(f:flink{name:fDevAnalToEs})
create(k)-[r:read]-(f)
return k,f,r
match(k:kafka{topic:XLP_MOBILE_LOG})
match(f:flink{name:MobileToEs})
create(k)-[r:read]-(f)
return k,f,r
4.3.7 ES任务存储关联
match(f:flink{name:MobileToEs})
match(e:es{index:id_m_1000*})
create(f)-[r:wirte]-(e)
return e,f,r
match(f:flink{name:UserAnalToEs})
match(e:es{index:id_m_user_device_*})
create(f)-[r:wirte]-(e)
return e,f,r
match(f:flink{name:fDevAnalToEs})
match(e:es{index:xlp_dev_appid_version_brand_record})
create(f)-[r:wirte]-(e)
return e,f,r
4.3.8 配置索引关联
match(a:api{name:configApi})
match(b:api{name:lxApi})
create(a)-[r:wirte]-(b)
return a,b,r
match(a:api{name:configApi})
match(b:api{name:ssApi})
create(a)-[r:wirte]-(b)
return a,b,r
match(a:api{name:configApi})
match(b:es{index:id_m_1000*})
create(a)-[r:wirte]-(b)
return a,b,r
4.3.9 实时任务存储关系
match(a:api{name:ssApi})
match(t:kafka{topic:xlp-log-body})
create(a)-[r:wirte]-(t)
return a,t,r
4.3.10 分发存储关系
match(t:kafka{topic:xlp-log-body})
match(e:es{index:id_network_*})
create(t)-[r:wirte]-(e)
return e,t,r
match(t:kafka{topic:xlp-log-body})
match(e:es{index:id_m_1000*})
create(t)-[r:wirte]-(e)
return e,t,r
4.3.11 崩溃日志关系
match(a:api{name:ssApi})
match(k:kafka{topic:id_m_crash})
create(a)-[r:uoData]-(k)
return a,k,r
match(k:kafka{topic:id_m_crash})
match(f:flink{name:ssMobileToES})
create(k)-[r:uoData]-(f)
return f,k,r
match(f:flink{name:ssMobileToES})
match(e:es{index:id_m_crash*})
create(f)-[r:wirte]-(e)
return e,f,r
4.4 最后是图结果 五、总结 技术血缘建立在数据血缘之上除了可以在节点构建数据详情映射管理数据血缘还可以将数据整个数据生命周期过程的使用的技术细节管理到血缘关系中。对数据管理人员、技术人员和产品经理等各方都可以做到技术和数据的透明管理。