在线文档: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. JavaSE-常用类

    JavaSE-常用类 Obeject Java Object类是所有类的父类,也就是说Java的所有类都继承了Object,子类可以使用Object的所有方法. Object类位于java.lang包 ...

  2. SpringBoot 整合 SpringSecurity 梳理

    文档 Spring Security Reference SpringBoot+SpringSecurity+jwt整合及初体验 JSON Web Token 入门教程 - 阮一峰 JWT 官网 Sp ...

  3. ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了

    2021年7月23日,.NET开发团队完成了所有的.NET平台的相关框架的MIT协议更改,我们可以通过 https://github.com/dotnet/aspnetcore/issues/1887 ...

  4. 题解 matrix

    传送门 无比毒瘤的dp题,而且伪装地好像很可做的样子 考场上我给它氪了差不多一个小时最后还是只能扔了个20pts状压走人 以下思路基本均来源于题解: 对于此题,题面中三个限制条件: (1)第 i 行第 ...

  5. GC垃圾收集器

    垃圾收集器是垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程. HotSport虚拟机采用分代收集(JVM规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也是这样组合使用的,不过已 ...

  6. MyBatis的useGeneratedKeys使用

    业务需求,用户表为主键自增,添加完用户之后,通过用户ID和角色表进行关联. 问题:由于主键自增,所以在用户添加之前是不知道ID的,当然可以通过查询得到当前的ID,不过需要自己多一步操作. 解决方案:使 ...

  7. WebStorm怎么设置实现自动编译less文件

    首先,需要保证电脑安装过Node.js,下载地址:https://nodejs.org/en/ 安装Node.js的时候会自动安装npm 然后,安装lessc模块 打开cmd控制台 输入下面一行npm ...

  8. C# 检测某版本VC++是否安装

    一.根据微软的产品号GUID,调用msi.dll class Program { static void Main(string[] args) { if (GetProcuct("{GUI ...

  9. HttpClient4.3教程 第三章 Http状态管理

    最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...

  10. restore db fail

    System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while ...