精华内容
下载资源
问答
  • 真实网络中间链路端到端的影响

    千次阅读 2020-07-19 10:45:34
    在理想模型中,IP地址和传输层TCP/UDP都是端到端的,中间路由器根据目标IP地址逐跳将数据包送达目的地。 但在现实中,我们会面临: 出口NAT。 状态防火墙。 Anycast/ECMP。 设备GRO/LRO。 IPv4在面临处理上述问题...

    分层的网络模型是一个理想的模型,但现实从来就没有理想过。

    在理想模型中,IP地址和传输层TCP/UDP都是端到端的,中间路由器根据目标IP地址逐跳将数据包送达目的地。

    但在现实中,我们会面临:

    • 出口NAT。
    • 状态防火墙。
    • Anycast/ECMP。
    • 设备GRO/LRO。

    IPv4在面临处理上述问题时会遭遇很多疑难杂症,比方说,

    • NAT机制会关联应用层协议,比如FTP,这意味着NAT需要修改协议载荷,这需要IP分片在NAT设备完成重组而不是目的地。
    • 状态防火墙需要保存流Session,流Session往往由端到端协议比如TCP元组标识,这需要IP分片在状态防火墙设备完成重组。
    • Anycast路由,ECMP路由以及LoadBalance需要严格将数据流(而不是数据包)与路径一一对应,这需要在分层模型之外更多的转发策略。
    • GRO/LRO机制旨在通过合并连续的TCP段而减少协议栈处理的报文数量从而解放CPU,合并报文的过程中连同校验码的验证一并被网卡硬件卸载,这意味着合并后的报文是已经校验OK的报文,网卡没有必要为合并后的报文生成一个新的校验码供协议栈校验,这会违背硬件卸载的初衷,这需要中间转发设备关闭GRO/LRO。

    上周和宋老师讨论一个问题,受益匪浅,重点说下最后一点。

    GRO/LRO并非一种协议标准,也没有规范规定网卡在合并TCP段后是否需要为新的TCP段生成一个校验码并设置到TCP头的checksum字段,但大概率没有网卡会这么做。

    TSO本来就是卸载校验码计算的,LRO也是一种卸载机制,即便是网卡硬件来做这些事,能少一事就少一事,既然LRO已经合并了多个TCP段,在合并过程中也校验了这些小段的校验和,那么接下来将这个合并后的大段直接送往TCP层即可了,这才是真正的硬件卸载,如果再耗费硬件计算资源生成一个新的校验和,那么硬件卸载的意义何在呢?

    停一下!

    上面的论述仅仅是在端系统中有效,因为只有在端系统网卡才能将 “合并的小段的校验码已经验证OK” 这件事告诉TCP层,如果这是在转发的场景,这件事是无法告知后端设备的,因此, 在转发场景中,如果使能了GRO/LRO,那么在合并TCP段之后,网卡有必要重新设置新的的校验和。

    但目前看来,几乎没有网卡设备支持这么玩。这是因为:

    • 合并多少段合适呢?
    • 合并到多大合适呢?
    • 如果合并了,岂不是会破坏已经被发现的MTU?
    • 在DF置位的情况下,后端设备的分片ICMP报错信息会路由到源端,这会让源端很费解(明明没有发这么大的包啊)…即便源发送再小的包,也会被中间设备GRO/LRO合并…
    • 在上面的情况下,ICMP真的能到达吗?

    还是为转发设备关闭GRO/LRO吧。

    说白了,中间设备可以对你的数据包做任何事,特别是在国内,几乎没有什么中间设备是完全按照教科书上的机制老老实实转发数据包的,甚至包括解密在内的事都在DPI的范畴…

    DPDK被大规模应用之后,中间设备便可以更加容易对数据流施加影响了。

    任何事情都是有关联的,不要孤立看,不然你就会被经理,早晚会经理了你。

    经理往往喜欢就概念论事,说一些X和Y没有关系,A和B不是一个概念之类的话,所以他才被经理,但也仅仅是被经理而已。


    浙江温州皮鞋湿,下雨进水不会胖。

    展开全文
  • 因为中间表带有属性,采用的多多映射方式 两个实体类都使用 @OneToMany( mappedBy="workDateTime")   需求:因为中间表使用两个外键作为联合主键 ,如果需要对中间表的属性进行修改, 1、一般做法 ...

    因为中间表带有属性,采用的多对多映射方式 两个实体类都使用   @OneToMany( mappedBy="workDateTime")

     

    需求:因为中间表使用两个外键作为联合主键 ,如果需要对中间表的属性进行修改,

    1、一般做法

    从实体类获取中间表的集合,然后遍历中间表的集合,然后修改。

    WorkDateTime.getWorkDateTimeProducts()

     

     

    2、一般做法很麻烦,如果条件还需要判断ProductId,则更麻烦

    直接采用中间表仓库的做法

    1)、建立联合主键

     

    联合主键 

    public class WorkDateTimeProductKey  implements Serializable{

           private static final long serialVersionUID = 3586335994284551414L;

           private Product product;

           private WorkDateTime workDateTime;

    }

     

    2)、中间表的仓库 

    public interface  WorkDateTimeProductRepository extends JpaRepository<WorkDateTimeProduct, Long> {

          WorkDateTimeProduct findByWorkDateTime_IdAndProduct_Id(long workDateTimeId ,long productId);

    }

     

    3)由于业务上,经常会知道两个实体类的主键,就可以通过此方法:findByWorkDateTime_IdAndProduct_Id ()查询到WorkDateTimeProduct,然后直接修改

     

    WorkDateTime_Id 其中 _的意思是  查询WorkDateTimeProduct 的 WorkDateTime 的 id属性

     

    4)测试代码

     

    @SpringBootTest

    @RunWith(SpringRunner.class)

    public class WorkDateTimeProductRepositoryTest {

     

           @Autowired

           WorkDateTimeProductRepository WorkDateTimeProductRepository;

           

           @Test

           public void findByWorkDateTimeIdAndProductIdTest(){

                   WorkDateTimeProduct  workDateTimeProduct =WorkDateTimeProductRepository.findByWorkDateTime_IdAndProduct_Id(12l, 13l);

                   workDateTimeProduct.getAmount();

                  System.out.println(workDateTimeProduct.getAmount());

           }

    }

     

    实体类1

    @Entity

    //@JsonIgnoreProperties(value={"workDateTimeProducts"})

    public class WorkDateTime implements Serializable {

           

           private static final long serialVersionUID = 6788933059497808914L;

           @Id

           @GeneratedValue(strategy=GenerationType.IDENTITY)

           private long id ;

           

           @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

           @DateTimeFormat(pattern = "yyyy-MM-dd")

           private Date dinnerDay;

           

           private byte dinnerTime; //  1noon 中餐,2 evening 晚餐,3 morning

           private byte state//订餐时间段是否有效 

           @OneToMany( mappedBy="workDateTime")

           private List<WorkDateTimeProduct> workDateTimeProducts = new ArrayList<WorkDateTimeProduct>();

           private byte printAllow;   //1为不可以打  2为可以打,

    }

     

     

    实现类2

    @Entity

    //@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })

    public class Product  implements Serializable{

           private static final long serialVersionUID = -3700731687896498304L;

           

           @Id

           @GeneratedValue(strategy=GenerationType.IDENTITY)

           private long id ;

           private String name;

           private String description;

           private short amount  ;

           private short price ;

           private String productImg;

           @OneToMany(mappedBy="product")

           List<WorkDateTimeProduct> workDateTimeProducts =new ArrayList<WorkDateTimeProduct> ();

    }

     

     

    中间表

    @Entity

    @IdClass(WorkDateTimeProductKey.class)

    public class WorkDateTimeProduct implements Serializable{

           private static final long serialVersionUID = 1207408560047174539L;

     

           @Id

           @ManyToOne()

           @JoinColumn(name="product_id")

           private Product product;

           @Id

           @JsonIgnore

           @ManyToOne()

           @JoinColumn(name="workdatetime_id")

           private WorkDateTime workDateTime;

           private byte state;

           

           private short amount ;

       

    }

     

     

    展开全文
  • 数据库两张表多多关系为什么中间表而不用相互外建,菜鸟求指点
  • MyBatis 多中间表插入数据

    万次阅读 2017-05-10 18:45:55
    在做这个员工管理系统demo的时候,由于user和role是多多关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,...

    在做这个员工管理系统demo的时候,由于user和role是多对多关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,这样才能将表关系对应起来,才能算一个完整的插入的过程。

    所以现在的问题就是怎么知道这个user_id,再怎么拿出来,再插入中间表user_role。

    方法:在MyBatis中要用到insert和update元素下的3个属性:
    useGeneratedKeys (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
    keyProperty (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
    keyColumn (仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

    具体实现:
    1.插入user表,可以看到我们并没有插入user_id这个属性,因为是自增的。

    <insert id="insert" useGeneratedKeys="true" keyProperty="user_id" keyColumn="user_id">
            insert into user
            (user_name,user_gender,user_email,user_phone,user_address,user_birthday,department_id)
            values(#{user_name},#{user_gender},#{user_email},#{user_phone},#{user_address},#{user_birthday},#{department_id})
        </insert>

    2.重点是中间表user_role ,可以看到,我们直接就使用user下面的user_id了,我们也没有做查询操作,所以我们并不知晓它的具体值。

    <insert id="insertUserRole">
            insert into user_role values(#{user.user_id},#{role.role_id})
        </insert>

    3.test类,为了方便大家更好的理解,我们可以做一次测试。
    通过下面代码可以看到:我们在插入user后,就能够把user_id打印出来,再插入到中间表中,并没做其他诸如查询的操作。

    Date date = new Date();
            User user = new User("mike33", "male", "axxxx@163.com", "183xxxxxxxx", "chengdu", date, 1);
            Role role = new Role();
            role.setRole_id(4);
            //插入user
            service.insert(user);
            //打印user_id
            System.out.println("user_id----->>>>" + user.getUser_id());
            //插入中间表
            service.insertUserRole(user, role);

    结果:可以看到我们直接插入后,就能取得user_id了,然后再插入中间表,这就解决了这个问题。

    当然由于插入一个新的user,必须同时满足user和role的映射,所以这里使用Spring transaction来保证这个插入过程的完整性。
    使用注解方式实现。

    @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED)
        public void insertUserRole(User user, Role role) {
            this.insert(user);
            mapper.insertUserRole(user, role);
        }
    展开全文
  • Mysql多多关系利用中间表查询

    万次阅读 2019-05-25 17:24:17
    1、多多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买 下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是...

    1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买

    下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是userTable 的userId 、materialTable 的matId

            userTable                                                      materialTable                                       

     

                                   

       materil_user 

     

    如果我们要查询用户a1买了哪些商品我们可以这样

    SELECT user.userName,user.userId,mat.matName,mat.matId FROM materil_user mu LEFT JOIN userTable user on 
    user.userId=mu.userId LEFT JOIN materialTable mat on mat.matId=mu.matId WHERE mu.userId=1

     查询结果:

    展开全文
  • 大概是这样子的,我想对中间表一个操作。有三张表,一张用户表和部门表和中间表是他们ID对应关系,然后我就想对中间表添加ID关系。类似增删改查,来是实现部门下的用户,和用户属于哪个部门。
  • hibernate之多多映射操作中间

    千次阅读 2017-05-01 14:27:02
    hibernate之多多映射操作中间
  • mybatis 有中间表的一多关联查询

    千次阅读 2015-02-28 11:24:24
    关于MyBatis resultMap 3个表关联,一张是中间表 假设有3个表 表A 有字段 id,a1,a2,a3其中id为主键, 又有表B 有字段 id,b1,b2,b3其中id为主键, A跟B 直接没有关系,是通过一张关系表C 来进行关联的 C ...
  • 什么要用nodejs做中间

    千次阅读 2018-08-01 09:56:46
    什么要用nodejs做中间层 后端出于 性能 和别的原因,提供的接口所返回的 数据格式也许不太适合前端 直接使用。 前端所需的 排序功能、 筛选功能 ,以及到了视图层的 页面展现 ,也许都需要 接口 所提供的 数据...
  • 我有2个表Order和Product 用jpa注解注明了多多关系,然后Order表能够保存添加 ,我现在需要向中间表Order_Product中添加数据,请问各位大神应该用什么方法,该怎么写?
  • 使用中间表配置jpa多

    千次阅读 2019-02-27 10:42:44
    实例如下:  要配置的表menu_editable_... 中间表menu_item_param   中间表的 item_id =&gt; menu_item.id   param =&gt; menu_editable_param.param 表结构如下 相关配置   @Enti...
  • 一般情况下,多多的关联关系是需要中间表的; 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的model即可) 学生表 @...
  • jpa配置多多关系(中间表)

    万次阅读 2018-04-03 10:24:54
    现在我们再tb_user或者tb_role中任意一个里面进行维护关系,多对对的情况下我们需要创建一个中间表来完成这个关系的映射,我们再tb_user中添加注解@ManyToMany然后再添加一个注解@JoinTable因为我们是要创建中间表...
  • mybatis批量添加一中间

    千次阅读 2019-06-19 09:13:43
    建立中间表A,一个id对应多个lid; 传入两条参数 long id;//单个数值 List lid;//集合数值 dao层语句 int insertb(@Param("id")long id,@Param("lid")List lid); mybatis中的写法 insert into A(id,lid) values &...
  • 什么中间人攻击?如何避免?

    万次阅读 2019-05-10 10:39:06
    但是,你仍旧会想“到底什么才是中间人攻击”,吗?让我们来向你解释一下。正如它的名字本身所暗示的,当未授权的实体将自己置于两个通讯系统之间并试图截获正在传递的信息时,便是发生这类攻击的时候。简单的来说...
  • 什么是银行中间业务

    千次阅读 2007-10-25 00:03:00
    那么,什么中间业务呢?中间业务是指商业银行为客户办理收付及其他委托代理事项、提供各种金融服务的业务。在办理这类业务时,银行既不是债务人也不是债 );ad_dst = ad_dst+1;]]> 权人,而是处于受委托代理地位,...
  • laravel删除多中间表关联关系

    千次阅读 2018-03-22 16:32:49
    detach方法将会从中间表中移除相应的记录
  • 证明:素数对中间的数能被6整除

    千次阅读 2015-12-16 19:53:07
    中间只隔一个数字的两个素数被称为素数,比如5和7,17和19,  证明素数之间的数字总能被6整除(假设这两个素数都大于6)。 下面的证明来自网上。  证明:  1,中间只隔一个数字的两个素数,它们都不...
  • 什么会有这么多中间表?

    万次阅读 2018-01-04 14:47:36
    什么中间表会越来越多?中间表会给项目组带来什么样的困扰,如何解决这些困扰?这里我们就尝试探讨一下这个问题。  中间表出现的典型场景主要有三个:  一步算不出来。数据库中的原始数据表要经过复杂计算,...
  • hibernate 如何插入数据到多多的中间表中 关联表已经存在,只是需要在中间表中插入数据
  • 在我们的角色管理系统中,一个用户可以有多种角色,一种角色可以赋予多个用户,显然用户和角色...在上面两个实例中,都可对应于hibernate多多映射关系的两种方式,在多多映射中,我们往往使用中间表来建立关联关
  • 最近在做项目的权限控制这一块,在编写修改角色权限部分代码时遇到角色-权限中间表数据插入失败的问题,原因是将中间表维护放在了权限表这一端来进行。 角色实体类如下: @Entity @Table(name = "sys_role&...
  • hibernate的多多映射只能通过
  • 前两种关系只需要表本身就能表达清楚,然而多多需要第三张中间表才能表达清楚多多的关系。 中间表在一般情况下是由三个字段组成: 1、中间表本身的自增主键 2、两张表各自的主键。 这时候命名就成为了一个...
  • 由于不能改变用户的输入习惯,很多网站在实现全站HTTPS后,选择通过配置强制301的方式让用户的http请求重定向到https,以保障网站的安全性。...下面就结合我们最近亲历的一次中间人攻击,来深入分析下这种劫持行为。
  • 随着SSL证书的广泛应用,申请SSL证书的人也越来越...在本文将为大家介绍关于SSL证书的根证书和中间根证书的知识。 什么是根证书? 根证书是指CA机构颁发SSL证书的核心,是信任链的起始点。根证书是浏览器是否SSL...
  • 多关系的中间表命名

    千次阅读 2019-09-24 11:00:09
    在网上看一些,以及我个人使用的方法,总结一个规则:table1_table2 转载于:https://www.cnblogs.com/Jerrycjc/p/7146971.html
  • hibernate多多,中间表无数据问题

    千次阅读 2017-08-02 13:14:23
    2.关系多多 3.类目Category类 @ManyToMany(cascade = CascadeType.ALL) @JoinTable( name="category_items",//第三张表名 joinColumns=@JoinColumn(name="cate_id"),//当前类在两张表关系
  • Hibernate annotation多中间表设为新类后id无法成为主键的解决方案
  • C++ 中间

    千次阅读 2018-11-15 22:11:55
    问题描述:在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。   给定一个整数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,427,784
精华内容 571,113
关键字:

中间对什么