在线文档: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 创建基础仓储代码,方便开发调用,更为复杂、自定义的业务,请按需拓展。

应用场景:

  • 机器学习
  • 数据分析

对比分析

  1. 更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。

  2. 数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL有很大不同)。

  3. 更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。

  4. 数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于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的更多相关文章

  1. 第十二章 Net 5.0 快速开发框架 YC.Boilerplate --千万级数据处理解决方案

    在线文档:http://doc.yc-l.com/#/README 在线演示地址:http://yc.yc-l.com/#/login 源码github:https://github.com/linb ...

  2. 第九章 Net 5.0 快速开发框架 YC.Boilerplate --定时服务 Quartz.net

    在线文档:http://doc.yc-l.com/#/README 在线演示地址:http://yc.yc-l.com/#/login 源码github:https://github.com/linb ...

  3. 第一章 Net 5.0 快速开发框架 YC.Boilerplate--框架介绍

    YC.Boilerplate 框架介绍 YC.Boilerplate 是一套快速开发框架,采用当下流行的前后端分离开发模式,前端 采用VUE.后端采用Net 5.0:框架实现了 多租户.动态webAp ...

  4. Base-Android快速开发框架(一)--概述

    首先简单介绍一下Base.Base是本人长期以来经过10来款APP总结出来的一个Android快速开发框架.包含数据缓存模块.工具包.第三方组件包.网络模块.数据解析.常用主界面布局等.可以快速的开发 ...

  5. EasyUi的快速开发框架

    基于EasyUi的快速开发框架   先看图,下边这个简单的增.删.改.查,如果自己写代码实现,这两个页需要多少行代码? 如果再有类似的增.删.改.查,又需要多少行代码? 我最近搞的这个快速开发框架中, ...

  6. 精通Web Analytics 2.0 (13) 第十一章:变身分析忍者的指导原则

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十一章:变身分析忍者的指导原则 这个激动人心的一章,分析了几乎所有工作的各个方面. 目标很简单:使用成熟的方法来帮助避免淹死的 ...

  7. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  8. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 《HiWind企业快速开发框架实战》(0)目录及框架简介

    <HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...

随机推荐

  1. tkinter 基础教程

    目录 介绍 模块 导入方式 API 使用 主窗口 运行窗口 组件列表介绍 Label 标签 Button 按钮 Options 属性选项 文本框 Entry 单行文本框 Text 多行文本框 文本框属 ...

  2. 使用Freemarker导出Word文档(包含图片)代码实现及总结

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  3. 跟我一起写 Makefile(十一)

    make 的运行 ------ 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的.但也有时你也许只想让make重编译某些文件,而不 ...

  4. 计算机专业学了快一年, 只会一点C语言,你好意思说自己是IT专业的?

    目录 一.C/C++入门阶段 学习视频推荐:C++入门基础[B站 小甲鱼] 二.C/C++开发进阶 学习视频推荐:C++进阶[慕课网 免费课] 三.C++开发高级 视频教程:程序设计[中国大学MOOC ...

  5. Elasticsearch之深入理解

    @ 目录 ES应用场景 ES应用场景举例 应用场景思考 ES和其他数据库对比 ES架构 Gateway Lucene 数据处理 发现机制与脚本 Transport REST full API ES中集 ...

  6. HTTP状态码关于各个网站的实地调查

    我使用的是新版Edge浏览器,右键,点击检查,点击网络,可以看到请求的各种文件.那么以此来看看状态码的使用吧. 101 与websocket相关,websocket在慕课网中的应用 - KeBoom ...

  7. Ubuntu时间有误差,设置系统时间与网络时间同步

    转载地址:https://blog.csdn.net/qq_33733970/article/details/78823620

  8. SpringBoot-2-1-6-集成activiti7-1-0-M4

    pom.xml <dependencyManagement> <dependencies> <dependency> <groupId>org.acti ...

  9. javascript html 鼠标放大镜效果

    1.鼠标放大镜效果 鼠标放大镜效果,将鼠标移入到左图片,则可以在其右边看到放大的图片,且鼠标移动滑块的大小即为右图显示图片.实际效果如下图所示:   <!DOCTYPE html> < ...

  10. C++继承体系中的内存对齐

    本篇随笔讨论一个比较冷门的知识,继承结构中内存对齐的问题,如今内存越来越大也越来越便宜,大部分人都已经不再关注内存对齐的问题了.但是作为一个有追求的技术人员,实现功能永远都是最基本的要求,把代码优化到 ...