第十一章 Net 5.0 快速开发框架 YC.Boilerplate --图数据库模块Neo4j
2021/9/17 19:34:59
本文主要是介绍第十一章 Net 5.0 快速开发框架 YC.Boilerplate --图数据库模块Neo4j,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在线文档:http://doc.yc-l.com/#/README
在线演示地址:http://yc.yc-l.com/#/login
源码github:https://github.com/linbin524/yc.boilerplate
源码gitee:https://gitee.com/linxuanming/yc.boilerplate
视频教程:
元磁之力框架开源初心和框架设计介绍(上): https://www.bilibili.com/video/BV1VM4y1G7hC/
元磁之力框架开源初心和框架设计介绍(下): https://www.bilibili.com/video/BV15h411s7w6/
元磁之力框架数据库表和代码生成使用教程实战: https://www.bilibili.com/video/BV1oM4y137D5/
QQ群:1060819005
后续:关于框架demo和细节技巧,会在QQ群中发布,就不撰文说明。
图数据库模块 Neo4j
基础介绍
Neo4j是一个高性能的NOSQL图形数据库,我们通常在做知识图谱体系用到该数据库。YC.Boilerplate 将其引入框架中为后续的数据分析等功能提供助力。
当前模块 YC.Neo4j
创建基础仓储代码,方便开发调用,更为复杂、自定义的业务,请按需拓展。
应用场景:
- 机器学习
- 数据分析
对比分析
-
更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。
-
数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL有很大不同)。
-
更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。
-
数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于Neo4j特殊的数据存储结构和专门优化的图算法。
开发示例
场景说明
现有一组用户数据UserInfo,一组公司数据Company,现在想通过技术手段使用两组数据组合,类似企查查效果,通过查找某个人,查出它关联的公司信息。
初始化 上述场景测试数据
public Neo4jServiceUnitTest() { neo4jRepository = new Neo4jRepository("testdb"); userList = new List<UserInfo>(); userList.Add(new UserInfo() { Key = Guid.NewGuid().ToString(), Name = "张三", Sex = "男", Type = "普通用户" }); userList.Add(new UserInfo() { Key = Guid.NewGuid().ToString(), Name = "里斯", Sex = "男", Type = "高级用户" }); userList.Add(new UserInfo() { Key = Guid.NewGuid().ToString(), Name = "王五", Sex = "男", Type = "普通用户" }); userList.Add(new UserInfo() { Key = Guid.NewGuid().ToString(), Name = "张小玉", Sex = "女", Type = "高级用户" }); companyList = new List<Company>(); companyList.Add(new Company() { Key = Guid.NewGuid().ToString(), CompanyName = "万度科技", CEO = "张三", Supervisor = "张小玉", Type = "科技" }); companyList.Add(new Company() { Key = Guid.NewGuid().ToString(), CompanyName = "签谷科技", CEO = "王五", Supervisor = "张小玉", Type = "科技" }); companyList.Add(new Company() { Key = Guid.NewGuid().ToString(), CompanyName = "东方娱乐", CEO = "张小玉", Supervisor = "张小小", Type = "娱乐" }); companyList.Add(new Company() { Key = Guid.NewGuid().ToString(), CompanyName = "杰飞实业", CEO = "里斯", Supervisor = "张小小", Type = "实业" }); }
效果如下:
创建公司和用户 联系【CEO是某个用户】
/// <summary> /// 创建 掌控 关联数据关联 /// </summary> /// <returns></returns> [Fact] public async Task MatchRelationControlTest() { string condition = $"{neo4jRepository.LeftKey}.Name={neo4jRepository.RightKey}.CEO"; var result = await neo4jRepository.MatchNodeByProperty("UserInfo", "Company", "掌权", $"{neo4jRepository.LeftKey}.Name", condition); Assert.True(result.Counters.ContainsUpdates); }
效果如下:
创建公司和其他用户关系【监事是其他用户】
/// <summary> /// 创建 公司关联 关联数据关联 /// </summary> /// <returns></returns> [Fact] public async Task MatchRelationLinkTest() { string condition = $"{neo4jRepository.LeftKey}.Name={neo4jRepository.RightKey}.Supervisor"; var result = await neo4jRepository.MatchNodeByProperty("UserInfo", "Company", "公司关联", $"{neo4jRepository.LeftKey}.Name", condition); Assert.True(result.Counters.ContainsUpdates); }
效果如下:
修改某个用户信息
/// <summary> /// 更新节点信息 /// </summary> /// <returns></returns> [Fact] public async Task UpateNodeTest() { string condtion = "Name:'里斯'"; string setStr = $"{neo4jRepository.Key}.Name='里斯李',{neo4jRepository.Key}.Type='VIP用户'"; var result = await neo4jRepository.UpdateNode("UserInfo", condtion, setStr); Assert.True(result.Counters.ContainsUpdates); Assert.Equal(2, result.Counters.PropertiesSet); }
效果如下:
查找某个人关联公司
/// <summary> /// 通过连接关系 查询指定节点信息 /// </summary> /// <returns></returns> [Fact] public async Task SelectNodeByRelationShipTest() { string relationShipName = "公司关联"; string condition = "UserInfo.Name='张小玉'"; var tupleList = await neo4jRepository.SelectNodeByRelationShoip<UserInfo,Company>("UserInfo", "Company",relationShipName, condition); Assert.True(tupleList.Item1.Count>0); Assert.True(tupleList.Item2.Count>0); }
效果如下:
这篇关于第十一章 Net 5.0 快速开发框架 YC.Boilerplate --图数据库模块Neo4j的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享