entity

TCP/IP协议与Http协议的区别详解

对着背影说爱祢 提交于 2020-08-07 19:34:03
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”   术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议。“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络。把 IP想像成一种高速公路 ,它允许其它协议在上面行驶并找到到其它电脑的出口。 TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP ,文件传输协议FTP这样的协议等。 你应该能理解,TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。 HTTP(超文本传输协议

Mybatis 强大的结果集映射器resultMap

为君一笑 提交于 2020-08-07 13:18:41
1. 前言 resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。 resultMap 可以将查询到的复杂数据,比如多张表的数据、一对一映射、一对多映射等复杂关系聚合到一个结果集当中。日常的业务开发通常都会和它打交道,今天就对 resultMap 进行一个详细讲解。 2. resultMap 接下来我们来看看 resultMap 是如何进行映射的。 2.1 Getter/Setter 注入 我们声明一个数据库对应的实体类: /** * @author felord.cn * @since 16:50 **/ @Data public class Employee implements Serializable { private static final long serialVersionUID = -7145891282327539285L; private String employeeId; private

Milvus数据管理:删除的实现原理

妖精的绣舞 提交于 2020-08-07 13:18:00
本文将主要讲述 Milvus 是怎么实现删除功能的。删除是许多用户期待已久的功能,这次终于在 Milvus 0.7.0 版本中发布。区别于直接调用 FAISS 的 remove_ids 接口,为了让删除更加高效,并能够支持更多索引类型,我们做了全新的设计。 在 FAISS 中,删除 ID 和它对应的向量需要遍历所有数据以决定哪些向量需要删除 github.com/facebookrese , 频繁操作会极大地影响系统性能,更无法做到删除和查询并发执行。如果是已经落盘的数据,则需要把数据文件加载进内存进行删除,再重新落盘,代价非常大。这个方案自然无法运用在生产环境。此外,FAISS 目前只在 IndexFlat, IndexIVFFlat, IDMap 这三种索引类型上支持删除,而 Milvus 的目标是不仅让 FAISS 的所有 CPU 与 GPU 索引支持删除,在未来还能陆续扩展到其他对接的 ANNS 库中。所以,我们必须自己设计删除功能。 在上一篇文章 Milvus 如何实现数据动态更新与查询 中,我们了解到数据从导入直至落盘的全部过程。在这里我们先回顾一下其中的一些基本概念。Memory manager 管理所有 insert buffer,其中每个 MemTable 对应一个 Collection(在 Milvus 0.7.0 中 Table 被更名为 Collection

有限状态机FSM(Finite State Machine)及实现方式介绍

元气小坏坏 提交于 2020-08-07 13:10:37
一、为什么引入有限状态机?   最近做一个项目,项目中很多 实体(Entity) ,每个实体都有很多 状态(State) ,各状态会经过不同 事件(Event) 触发后转换到另一个状态。这些事件包括但不限于:用户页面点击触发,生效时间或失效时间到达,其他依赖实体状态变更等。在状态变更后还会有一系列 动作(Action) 处理。一旦相互依赖实体或实体本身状态增多,状态转换变多,处理这些状态的业务代码也会分散在各处,代码处理很容易漏掉,维护成本很高。所以考虑引入有限状态机。 二、什么是有限状态机?   有限状态机,也称为 FSM(Finite State Machine) ,其在任意时刻都处于有限状态集合中的某一状态。当其获得一个 输入字符 时,将从 当前状态 转换到 另一个状态 ,或者仍然 保持在当前状态 。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向(方向表示从一个 初态 转换到 次态 )加权(权表示 事件 )边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入 “消亡状态 (Doom State) ”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为 “起始状态” ,表示FSM的初始状态。状态6称为 “结束状态” 。 在启动一个FSM时,首先必须将FSM置于“起始状态”

Asp.net core下利用EF core实现从数据实现多租户(2) : 按表分离

☆樱花仙子☆ 提交于 2020-08-07 10:17:58
前言 在 上一篇 文章中,我们介绍了如何根据不同的租户进行数据分离,分离的办法是一个租户一个数据库。 也提到了这种模式还是相对比较重,所以本文会介绍一种更加普遍使用的办法: 按表分离租户。 这样做的好处是什么: 在目前的to B的系统中,其实往往会有一个Master数据库,里面使用的是系统中主要的数据,各个租户的数据,往往只是对应的订单、配置、客户信息。 这就造成了,租户的数据不会有很多的种类,他的数据表的数量相对Master来说还是比较少的。 所以在单一租户数据量没有十分庞大的时候,就没有必要对单一租户数据独立到单一数据库。多个租户数据共享使用一个数库是一个折中的选择。 下图就是对应的数据表结构,其中store1和store2使用不同的数据表,但有同一个表名后缀和相同结构。 实施 项目介绍 本文的项目还是沿用上一篇文章的代码,进行加以修改。所以项目中的依赖项还是那些。 但由于代码中有很多命名不好的地方我进行了修改。并且,由于代码结构太简单,对这个示例实现起来不好,进行了少量的结构优化。 项目中新增的对象有什么: 1. ModelCacheKeyFactory,这个是EF core提供的对象,主要是要来产生ModelCacheKey 2. ModelCacheKey, 这个跟ModelCacheKeyFactory是一对的,如果需要自定义的话一般要同时实现他们俩 3.

学习学习SpringSecurity

这一生的挚爱 提交于 2020-08-07 10:01:41
Spring Security 思维导图 简介 SpringSecurity是Spring下的一个安全框架,与shiro 类似,一般用于用户认证(Authentication)和用户授权(Authorization)两个部分,常与与SpringBoot相整合。 初阶 Spring Security 添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 重新部署,会看到一个登陆页面。 密码,翻看日志可以查看到 用户名默认为 user 输入用户名和密码 登录成功 中阶 Security 内存用户名和密码 用户名密码登录 在上面的章节中,添加了Security依赖,直接就出现了登录界面,这次让用户名,密码保存到内存当中 写一个extends WebSecurityConfigurerAdapter的配置类: 配置类内容如下 package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context

使用Sentinel实现隔离、限流

落爺英雄遲暮 提交于 2020-08-07 03:21:28
在18年Hystrix停止更新,Sentinel和Resilience4j逐步成熟,在国内Sentinel的使用企业更加多一些,接下来通过一个实站例子把Sentinel的主要功能使用起来。 功能对比 Sentinel Hystrix resilience4j 隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离 熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间 实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于 RxJava) Ring Bit Buffer 动态规则配置 支持多种数据源 支持多种数据源 有限支持 扩展性 多个扩展点 插件的形式 接口的形式 基于注解的支持 支持 支持 支持 限流 基于 QPS,支持基于调用关系的限流 有限的支持 Rate Limiter 流量整形 支持预热模式、匀速器模式、预热排队模式 不支持 简单的 Rate Limiter 模式 系统自适应保护 支持 不支持 不支持 控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看 不提供控制台,可对接其它监控系统 Sentinel 基本概念 资源 资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码

EFcore 修改部分字段

吃可爱长大的小学妹 提交于 2020-08-07 03:10:17
using System.Linq.Expressions; // 用表达式树,部分字段 Expression<Func<CourseSchedule, object >>[] updatedProperties = { p => p.createtime, }; 调用Helper类 _courseScheduleRepository.Value.UpdateEntity(schedule, updatedProperties, true ); Helper类 /// <summary> /// 更新部分字段 /// </summary> public virtual int UpdateEntity(T entity, Expression<Func<T, object >>[] updatedProperties, bool IsCommit = true ) { int result = 0 ; _dbContext.Set <T> ().Attach(entity); if (updatedProperties.Any()) { foreach ( var property in updatedProperties) { _dbContext.Entry <T>(entity).Property(property).IsModified = true ; } } if

实战:一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了

丶灬走出姿态 提交于 2020-08-07 02:04:50
实战:一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了 前言 在日常的软件开发中,程序员往往需要花费大量的时间写CRUD,不仅枯燥效率低,而且每个人的代码风格不统一。MyBatis-Plus 代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块及前端页面的代码,极大的提升了开发效率。 项目介绍 本项目将以springboot用演示,前端使用freemaker,数据库持久层用mybatis(考虑到mybatis的使用还是最普遍的,就没有用jpa和mybatisplus),通过Velocity模板引擎配置各模块的文件模板,通过mybatis-plus代码生成器连接mysql,用商品表为例生成各模块的代码和前端页面。(本项目只演示分页查询和导出功能)。 本项目所有代码和脚本都能都文末找到地址。 实战 数据库脚本 创建一张商品表test_goods CREATE TABLE `test_goods` ( `id` bigint(20) DEFAULT NULL COMMENT 'id', `goods_sn` varchar(45) DEFAULT NULL COMMENT '商品编码', `name` varchar(255) DEFAULT NULL COMMENT