精华内容
下载资源
问答
  • 分布式环境Raft一致共识算法解读

    万次阅读 2018-06-03 16:16:32
    Raft是分布式环境下的一致算法,它通过少数服从多数的选举来维持集群内数据的一致。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在。Raft非常类似于paxos协议(参见我...

    Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在。Raft非常类似于paxos协议(参见我的这篇文章《paxos算法如何容错的–讲述五虎将的实践》),然而它比paxos协议好理解许多(因为paxos协议难以具体实现,所以zookeeper参考paxos实现了它自己的Zab算法)。同样,Raft有一个用GO语言实现的etcd服务,它的功能与Zookeeper相同,在容器操作系统CoreOS作为核心组件被使用。

    本文先从算法整体上说明其特点,再细说其实现。为方便大家理解,本文还是以图为主,没有过多涉及算法的细节。Raft易理解易实现,是我们入门分布式一致性算法的捷径!

    1.算法易被理解

    Raft协议的性能并不比paxos的各种实现更高,它的优点主要在于协议的可理解性好,且非常具备可操作性,很容易照着协议就可以实现出稳定、健壮的算法。论文作者在斯坦福和加州大学做过测试,对本科及研究生分别学习paxos和Raft协议课程后测验,在总分60分的测试里其得分如下图所示:

    raft与paxos学生应用成绩

    从上图可见,Raft协议的得分(平均25.7)明显高于paxos(平均20.8)。我相信学习过paxos算法的人都有心得:很辛苦的理解后,一段时间后就完全不记得细节了,至少我本人是如此。而Raft协议非常简单清爽,这个测试也很能反映问题。在测试后,作者还发起了一个调查问卷,询问学生这两个算法哪个更容易实现?哪个更容易理解?其答案如下图所示:raft与paxos学生调查问卷

    可见,这个带有主观性的调查问卷呈现压倒性优势:Raft是一个容易理解、容易实现的算法。

    2.算法实现etcd的性能测试数据

    Raft有很多语言的实现,包括C++、GO、Scala、Java等(详见https://raft.github.io/),但最有名的实现就是etcd了,它作为CoreOS生态的重要组件而闻名。我们可以通过etcd的性能数据看一看Raft算法的实际表现。

    测试集群由3台服务器构成,其配置如下:

    • Google Cloud Compute Engine
    • 3 machines of 8 vCPUs + 16GB Memory + 50GB SSD
    • 1 machine(client) of 16 vCPUs + 30GB Memory + 50GB SSD
    • Ubuntu 17.04
    • etcd 3.2.0, go 1.8.3

    下面分别测试写和读的性能。写性能数据如下表所示:

    Number of keysKey size in bytesValue size in bytesNumber of connectionsNumber of clientsTarget etcd serverAverage write QPSAverage latency per requestAverage server RSS
    10,000825611leader only5831.6ms48 MB
    100,00082561001000leader only44,34122ms124MB
    100,00082561001000all members50,10420ms126MB

    而读性能数据如下表所示:

    Number of requestsKey size in bytesValue size in bytesNumber of connectionsNumber of clientsConsistencyAverage read QPSAverage latency per request
    10,000825611Linearizable1,3530.7ms
    10,000825611Serializable2,9090.3ms
    100,00082561001000Linearizable141,5785.5ms
    100,00082561001000Serializable185,7582.2ms

    在读性能数据中,Linearizable一致性高于Serializable,故性能稍差。其原始页面在这里:https://coreos.com/etcd/docs/latest/op-guide/performance.html

    事实上,在算法的正常运行中与paxos并无差异。而一旦leader宕机,从发现到重新选举出新leader、新leader开始工作的这段时间的长短,是影响性能的重要指标。下图中对5个节点构成的集群反复的让leader宕机,观察恢复的时间,其结果如下:

    raft选举出新领导人耗时数据

    在上图中有以下几个关注点:

    • 不同颜色及线条代表着follower的定时器。如在300ms内没有收到leader的心跳,则发起选举。其中150-300ms这样的数据表明,这5台follower的定时器分布在150ms到300ms之间,呈现随机化。而150-150ms表示没有随机化,所有节点的超时时间是一样的。
    • 横坐标代表着发现到替换掉宕机leader开始服务的时间。数值的单位为毫秒。
    • 纵坐标表示测试时间在全部测试数据中的比例。以上每条线都做了1000次试验(除150-150ms只试验了100次)。

    上图表明,增加随机化后,可以大幅减少选举的平均用时。下面的图表明,通过降低最短的超时时间,也可以减少宕机时间。Raft推荐的时间为150-300ms。

    3、Raft算法概述

    复杂的问题可以通过分解为多个简单的子问题来解决,Raft正是如此(paxos很难分解)。Raft首先定义自己是一个key/value数据库。那么,请求就分为读和写。Raft将问题分解为以下几个要点:

    • 集群里有一台为leader节点服务器,且读写请求都只能向该节点发送,以此保证一致性;
    • 当集群内没有leader节点时,leader节点被多数节点选出来。比如集群有3个节点,那么2个节点同意的话,就可以选出1个作为leader;
    • 除leader节点外,其他节点叫做follower追随者。leader节点向follower节点同步每条写请求;

    因此Raft将一致性问题转换为leader的选举上,以及leader与follower之间的数据同步。我们先来谈leader与 follower之间的数据同步问题。每一次写请求会修改数据,读请求则不会,所以把leader收到的写请求当作一次操作日志记录下来,且同时把操作日志同步给所有的follower节点,而有一个最终状态数据库记录某一个key的最终值,如下图所示(事实上这与fabric区块链里,多条交易日志构成的世界状态数据库非常相似,详情请参见《区块链开源实现hyperledger fabric架构详解》):

    上图中其步骤含义如下:

    1. leader收到写请求y=9,此时状态数据库是y=1;
    2. 将y=9这条日志追加到Log的末尾,同时将该条日志同步给其他follower;
    3. 当多数follower成功收到这条y=9的日志后,leader将状态数据库从y=1更新为y=9;
    4. 返回client表示y=9设置成功。

    4、如何选举出leader

    当一个集群刚启动时,所有的节点都是follower,follower只能被动的接收leader的消息并响应。此时经过一段时间若follower节点发现全集群没有leader,开始把自己作为leader的候选人向大家征询投票,此时该节点叫做Candidate候选人。若多数follower节点同意后,则升级为leader节点。而leader节点有义务定时心跳通知所有的 follower节点,使follower节点知道此时集群中的leader是谁。如下图所示:

    上图的状态变迁里,follower在一个随机定时器(例如150ms到300ms之间)内没有收到leader的心跳,则开始发起选举,而候选人就是自己,所以自己转化为Candidate,且自己首先投自己一票。若在投票未完成时,发现新的leader出现,则取消投票,由candidate转换为follower。

    每次选举是一个任期,这个任期叫做term。每次任期有一个任期号,它是全局的、递增的,当网络中断时虽然会暂时不一致,但网络畅通后会很快同步,如下图所示:

    term任期与leader选举

    如上图中,蓝色是选举期,绿色是产生leader后。如果不出现意外,这个leader会一直当下云,所以term周期会很长。出现宕机或者网络波动时,重新选举于是出现term2。在term3时也可能一直选举不出新的leader,此时很可能多个candidate发起了投票,票数被平摊后谁也没拿到大多数(由于每台follower的定时器时间是随机的,因此该情况发生概率很小,且发生后也能很快回归正常)。于是会进入term4。

    5、操作日志的同步

    leader需要把写日志同步到大多数follower后才能更新状态数据库,并向client回复写成功。如果没有得到多数follower的成功应答,leader会重复发送这条日志更新请求。下图中有8条日志3个任期5个节点,每条日志里除记录了操作行为外还记录了当时的任期:

    entries

    上图中,绿色是第一个任期,其中3条日志条目中第3条日志y=9没有被第4个节点接收到。黄色是第2个任期。绿色与黄色任期内,所有的日志皆被多数节点收到,因此都是写入状态数据库的,这些日志的状态都是commited已提交状态。蓝色是第3个任期,其第8条日志x=4没有被多数节点收到,因此该日志不是committed状态。

    leader与 follower之间的日志也可能存在不一致的情况,follower或者少了一些日志,或者多了一些日志,如下图所示:

    raft日志不一致

    上图中最上面一行是leader的日志,而follower的日志存在以下情况:

    • a、b表示follower相比leader少了几条日志;
    • c、d表示follower相比leader多了几条日志;
    • e、f表示同时少了一些日志,又多了一些日志。比如f情况就是这台follower在任期2时被选为leader,刚添加3条日志还没有提交呢就宕机了,重启后被选为leader,又迅速收到5个写请求加了5条日志,还没提交又宕机了,此时再启动作为follower存在时的状态就是上图f的状态。

    leader如果确定多数机器收到日志,自然可以提交。如果新leader刚被选出来,它会试图把多数机器上保存的日志(即使它自己没有这条日志)–也就是前任的日志也提交,但这未必保证一定成功,如下图所示:

    在上图中,d和e就是提交前任日志努力下可能导致的两种状况:

    1. 在a中,S1是leader,前写入日志2并只同步日志到S1和S2,还未到其他节点时就宕机了;
    2. 在b中,S5通过它自己、S3、S4的投票被选为leader,因此它并不知道日志2的存在。此时它收到client的新请求写入日志3,而刚写入日志3就宕机了;
    3. 在c中,S1重新被选为leader,此时它发现日志2还未被复制到多数follower,开始复制日志2。此时S1收到新请求,并记录了日志4;
    4. 在d中是第一种场景,此时老的日志2被复制到了S3上,然而此时的日志2虽然被S1、S2、S3多数节点持有,但却是通过2次任期完成的,且新任期里的日志4并未被复制到多数机器上,所以日志2并不能认定可以处于commited状态。若此时S1宕机,S5重新当选,则日志2会被覆盖丢弃,当然也包括未被复制到多数机器的日志4;
    5. 在e中是接着c的第二种场景,若日志4也被复制到S1、S2、S3这多数机器上,则日志2与日志3同时处于commited状态,永远不会被覆盖。

    6、集群规模的配置变化

    通常我们把raft集群配置为3或者5个节点,特别是5个节点时可以容忍2个节点宕机。这给我们平滑升级时带来了好处:1台台升级时仍然可以容忍1台宕机。但若我们的集群原来是3个节点的组合,却改为5个节点,如果这个过程是不停止服务动态完成的,这可能出现问题,如下图所示:

    Raft直接从3台谈到5台不安全

    在上图中,绿色的老配置只有1、2、3这三台server组成集群,而在蓝色的新配置里则在1、2、3、4、5这五台server组成的新集群。于是,存在红色箭头指标的点,在该点上,可能1、2这两台server根据老配置在它们2个中选出第1个leader,而3、4、5根据新配置在它们3个中选出了第2个leader。同一时刻出现了2个leader,这样数据就会不一致。

    为了解决上述问题,Raft提出了一个共同一致状态,该状态处于老配置和新配置生效的中间阶段。首先,我们设C(old)为老配置,而新配置为C(new),欲从C(old)状态置C(new),必须经历C(old,new)状态。其中,更新到C(old,new)以及C(new)时,仍然以复制日志的方式进行,即:先进行日志复制,当确定多数节点收到该日志后,则该日志为commited已提交状态。如下图所示:

    Raft更新配置时的共同一致状态

    从上图中可以看到:

    1. 在C(old,new)日志开始复制时,仍然仅使用C(old)这一种配置,所以不会出现双leader;
    2. 而C(old,new)一旦进入commited提交状态,此时若leader宕机重新选举,则要求必须是具备C(old,new)的candidate才能被选为新leader;
    3. 之后,leader开始复制日志C(new),从这一刻起leader的新配置开始生效。

    7、日志的优化

    可以看到,Raft算法的核心就是leader选举以及日志复制。而日志的无限增长,必然带来性能问题,这是从工程角度必须解决的问题。日志表示的是过程,状态数据库表示的是结果;同样,我们可以定期把某一时间点之前的日志做成状态数据库,或者称为快照,仅保留该时间点后的日志,这样就可以大幅减少日志的数量。如下图所示:

    raft日志快照

    在上图中,原先的已经被提交的5条日志最终导致的状态是x=0&&y=9,故可以被快照替代,这便减少了日志量。

    8、小结

    Raft还有一个非常形象的算法演示动画,包含了一致性算法的由来、leader的选举、隔离网络下的leader选举、日志的复制等场景,请打开RaftUnderstandable Distributed Consensus链接观看。

    学习Raft算法有助于我们理解分布式环境下的一致性解决方案,而且它确实比paxos好理解许多,可以作为我们的入门算法。

     

    (转载本站文章请注明作者和出处 陶辉笔记 ,请勿用于任何商业用途)

    展开全文
  • Mysql主从切换

    千次阅读 2019-03-27 16:17:01
    mysql主从关系中,如果master宕机了,则要提升slave为主,等原来的主库恢复之后,则要把老的主库变为从库,这样才能尽最大可能的保证应用层面的业务高可用和数据的完整。 ## mysql主从切换为从主: 从...
        mysql主从关系中,如果master宕机了,则要提升slave为主,
        等原来的主库恢复之后,则要把老的主库变为从库,
        这样才能尽最大可能的保证应用层面的业务高可用性和数据的完整性。
    
    
    ## mysql主从切换为从主:
    从库变主库
    old slave: 
    show processlist;#  确保Slave has read all relay log;
    STOP SLAVE IO_THREAD
    show slave status \G;检查IO及SQL线程是否正常,如果为NO表明同步不一致
    
    stop slave;
    reset master;
    reset slave all;(看版本号)
    
    grant replication slave on *.* repl@'IP' identified by 'replpwd';
    show master status;#记住这里列出的log_file和log_pos信息
    ------------------------------------------------------------------------------
    ## 主库变从库
    old master:
    Reset master;(新的slave,老的master)
    Reset slave;
    
    change master to master_host="IP",
    master_port=3306,
    master_user="repl",
    master_password="replpwd",
    master_log_file="...",#上一步中列出的log_file
    master_log_pos="...";#上一部中列出的log_pos
    
    start slave;
    show slave status\G;
    
    展开全文
  • SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是网络通信提供安全及数据完整的一种安全协议。TLS与SSL在传输层对网络连接进行加密。大部分互联网登录都是用的...

     作者:老司 链接:https://zhuanlan.zhihu.com/p/26241158 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    老司单位网站:www.maiside.top

    工业物联网是什么?

    简单来说,就是物联网在工业控制上的具体应用。


    SSL/TLS是什么?

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。大部分互联网登录都是用的SSL/TLS,可以去网易邮箱WWW.126.COM看下,右下角上面“正使用SSL登录”的标识。


    MQTT是什么?

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台。MQTT协议与传统工业通信协议相比有两个特色:使用发布/订阅消息模式,提供一对多的消息发布;可以与SSL/TLS加密融合一起,保证报文传输的安全。


    JSON是什么?

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,中文名字JavaScript 对象标记语言,简称JSON。JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。下面是百度天工的一个格式。

    {
    "requestId":"{requestId}",
    "method":"put",
    "path":"/v1/mydevice/metadata",
    "body":{
    "metadata":{
    "memoryFree":"32MB",
    "light":"green"
    },
    "profileVersion":5
    }
    }

    上面的格式是百度天工的,百度天工是什么,官方介绍:天工是基于百度云构建的、融合百度大数据和人工智能技术的“一站式、全托管”智能物联网平台,提供物接入、物解析、物管理、规则引擎、时序数据库、机器学习、MapReduce等一系列物联网核心产品和服务,帮助开发者快速实现从设备端到服务端的无缝连接,高效构建各种物联网应用(如数据采集、设备监控、预测性维保等)。


    网关是什么?

    网关一般情况下是嵌入式软硬件,具有以太网、RS485、GPRS、3G、4G等通信接口,实现协议转换功能,将PLC协议转换为MQTT协议,从而实现设备数据到云平台的传递。借用一句广告词,“网关不生产数据,只是数据的搬运工”。

    目前迈思德网关已经通过MQTT接入(ZKYC、NJCR、SHRJ、BJHT、BJPO、HXWL)六种平台,即将接入(华为MES、SHZY)两种平台,预计到2017年底将接入超过10家以上的云平台软件,并在本年度内完成与ThingWorx的通信接入。华为MES采用MQTT协议,实现了数据的采集与控制,这点值得做MES的借鉴。


    2017年度已经进入第二个季度,与2016年度有所不同的是,今年国有企业咨询设备通过网关进行远程数据采集与控制的比例比去年高,而且对物联网通讯协议MQTT都有所了解,不像去年,来咨询的基本都不清楚MQTT这种通讯协议。国有企业规模大,示范效应高,先从试点开始,后面逐步推广。

    今年大部分来咨询的技术人员都知道百度天工,虽然还不清楚百度天工的具体作用,但是都知道百度有个物联网平台。

    MQTT将成为国内工业物联网的首选云通信协议,尤其在大规模设备厂家远程运维系统中采用MQTT+SSL/TLS会成为标配。在MQTT协议之上,JSON格式更会成为必选,由于云平台软件大部分采用JAVA开发,JSON格式的的MQTT协议会更受到云平台开发人员的喜爱。但是对于传统工业自动化人员,MQTT协议还是很难接触到的,一般对Modbus、OPC接触得多。

    后记:

    今天已经是2018年7月中旬,世界杯决赛日,根据迈思德网关接入的近百家平台分析,MQTT成为主流,没有其他。

    展开全文
  • 关系的完整-实体完整

    千次阅读 2019-06-29 09:19:32
    顾名思义,关系的完整规则是对关系的约束,这些约束条件实际上是现实世界的要求。 关系模型中有三类完整的约束:实体完整,参照完整,用户定义的完整。 1.实体完整 实体完整定义: 若属性A(一...

    关系模型的完整性规则是对关系的某种约束条件。

    顾名思义,关系的完整性规则是对关系的约束,这些约束条件实际上是现实世界的要求。

    关系模型中有三类完整性的约束:实体完整性,参照完整性,用户定义的完整性。

    1.实体完整性

        实体完整性定义:

               若属性A(一个或一组属性)是基本关系R的主属性,则A不能取空值。

    所谓空值就是“不知道”或“不存在”或“无意义”的值。

                这是书本上给的定义,并给出了完整性规则说明:

                1.1实体完整性规则是针对基本关系而言的。

    我自己的理解:关系可以理解为实体或关系,具体化就是一张表,实体可以为一张表,关系可以为一张表。

    所以实体完整性可以理解为是仅对一张表的完整性约束。

                 1.2现实世界的实体是可以区分的,他们具有某种唯一性标识。

    我自己的理解:毋庸置疑,现实世界实体是可以区分的,很多老师上课的时候喜欢拿姓名为例,我觉得一定程度上迷惑了初学者,既然实体是可以区分的,他们具有某种唯一性标识,比如指纹,中国大陆的身份证号,如果你是大学生的话,学号就是你们的唯一性标识。1.2强调的是现实中的实体他们具有唯一性标识,但是这种标识不唯一,例如指纹,中国大陆身份证号码。

                1.3相应地,关系模型中以主码作为唯一性标识。

                1.4主码中的属性不能取空值。如果主属性取空值,就说明存在某个不可比标识的实体,与1.2相违背,因此这个规则称为实体完整性。

               我自己的理解: 主码可以是多个主属性的组合,每个主属性不能单独作为主码。在学习参照完整性之前一定要理解实体完整性规则,实体完整性规则举例:一个学生表,学号(Sno)可以唯一标识学生,课程表(Cno)可以唯一标识课程。

                

     

    展开全文
  • 数据库的关系完整

    千次阅读 2020-12-31 09:05:57
    现实世界的实际存在决定了关系必须满足一定的完整约束条件,这些约束表现在对属性取值范围是限制上。完整规则就是防止用户使用数据库时,想数据库中加入不符合语义的数据。规则模型中有3类完整约束:实体完整...
  • 异次元骇客、虚拟机和造物

    千次阅读 热门讨论 2018-03-18 19:46:58
    所以各种宗教试图将造物想像成跟我们同在一世界,并将他人性化,并让他成为完美的神,这是非常可笑的。从逻辑上,也有人论证,上帝无法创造出自己举不起的石头,所以上帝不是万能的。尽管上帝不是万能的,但创造一...
  • 区块链技术是当前炙手可热的新兴技术,关于该技术的介绍比比皆是,但是介绍往往是从技术实现的角度来阐述区块链的优势,本文是从一个业务架构师的角度,来努力说明因为区块链,这个世界将会看到的新变化,或者说...
  • 数据库完整

    千次阅读 2018-05-23 22:43:46
    数据的完整和安全 数据库的完整和安全是两个既有联系又不尽相同的概念。数据的完整是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全是保护数据库防止恶意...
  • 种子(世界生成)

    千次阅读 2021-03-14 13:13:56
    本文章介绍的是用于生成游戏世界的种子。关于游戏内的其他种子,请见“种子(Seed)是一个由一个或多个字符(包括正整数和负整数)组成的一个值,游戏根据这个值创建每一个Minecraft世界。种子在不同平台上不兼容,而...
  • 测试网页兼容时如何选择浏览器

    千次阅读 2017-12-03 16:15:10
    用户界面 - 包括地址栏、后退/前进按钮、书签目录等,也就是除了用来显示你所请求页面的窗口之外的其他部分。 浏览器引擎 - 用来查询及操作渲染引擎的接口。 渲染引擎 - 用来显示请求的内容,例如,如果...
  • 数据库完整5.1 实体完整5.1.1 实体完整定义5.1.2 实体完整检查和违约处理5.2 参照完整5.2.1 参照完整定义5.2.2 参照完整检查和违约处理小结5.3 用户定义的完整5.3.1 属性上的约束条件不允许取空值列...
  • 分布式一致协议Raft & Paxos 简单 v.s. 完美
  • “学号、课程号”为主码 “学号”和“课程号”两个属性都不能取空值 实体完整规则的说明: 实体完整规则是针对基本关系而言的。 一个基本表通常对应现实世界的一个实体集。 现实世界中的实体是可区分的,...
  • 数据库完整:数据的正确(是指数据是符合现实世界语义,反映了当前实际状况的)、数据的相容(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整 : 防止数据库中存在不符合语义的数据,...
  • 什么要做显著检验? 3.怎么做显著检验?(阅读本回答预计用时9分钟) 后文将对该三个问题作出解释,最后推荐一个CrashCourse的统计学扫盲课程 一.什么是显著检验? 在统计学中,显著检验是“统计假设...
  • Polkadot验证节点的安全和可用

    万次阅读 2019-05-16 18:29:45
    在本文中,我将在验证节点的安全和可用方面讨论两个主题。我知道,这里介绍的技巧仅仅涵盖了POS验证节点的“安全和可用”冰山一角。不过,我发现它们对于您的测试实例提供最小的安全和可用是有用的。 ...
  • 在一维方向上扩展的横版卷轴游戏(动作类游戏为主)和纵版卷轴游戏(射击类游戏为主)。这些类型的游戏里,为了避免循环平铺给玩家带来的重复的疲劳,卷轴游戏会添加一些随机或动态的元素,比如超级玛丽里的...
  • 关系的完整-参照完整

    千次阅读 2019-06-29 10:30:44
    (首先理解弄透实体完整,实体完整规则是最好... 定义:设F是基本关系的一个或一组属性,但不是关系R的码(如果某张表多个属性作为码,那么这里的码不能理解单个属性,这也是码和主属性的区别),Ks是基...
  • 关系的候选码、码、外码以及关系的完整

    千次阅读 多人点赞 2020-05-26 17:34:40
    关系的候选码、码、外码 候选码 定义:能惟一标识关系中元组的一个属性或属性集,称为候选码(Candidate Key) “学生关系”中的学号能惟一标识每一个学生 “选课关系”中,只有属性的组合“学号+课程号”才能惟一...
  • 人与周围世界的基本联系问题  C. 思维和存在的关系问题  D. 关于人的本质问题 2.划分唯物史观和唯心史观的根据是(C)  A. 是否承认社会历史的规律  B.  是否承认阶级斗争  C.
  • CAP, BASE, 最终一致和五分钟原则

    万次阅读 2017-02-16 16:30:34
    CAP,BASE和最终一致是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储的理论依据。这个是一切的源头。 CAP     C: Consistency 一致A: Availability 可用(指的是快速获取数据)...
  • App Store例谈游戏成功的持续 App Store例谈游戏成功的持续 文 / 郑金条 最近,开发界对App Store存有两种截然相反的论调:一种人忧心忡忡,认为在刷榜和黑卡双重作弊习气的裹挟夹击下,原本纯澈的开发...
  • 没有一条链能通吃全世界

    万次阅读 2019-05-16 18:38:22
    但钱并没有到你朋友账上,此时工行开始第二步:结算——把收款人信息发送建行,把钱交给人民银行(人行)。 人行负责第三步:清算——左手收下工行的钱...明明是件小事,什么要麻烦三家单位、叠出一个倒三角? ...
  • 史莱姆大型:16( × 8)中型:4()小型:1()行为攻击型攻击力简单:大型:3()中型:2()小型:0...Size * 0.51格关于其他含义,请见““史莱姆栖息在世界中的潮湿黑暗的地方,它们的攻击速度是其他非凝胶生物无法比拟的...
  • 数据库-数据库完整

    千次阅读 多人点赞 2019-06-29 00:26:10
    数据库完整 实体完整 · 定义实体完整 · 实体完整检查和违约处理 参照完整 · 定义参照完整 · 参照完整检查和违约处理 用户定义的完整 · 属性上的约束条件 · 元祖上的约束条件 完整...
  • 世界模型 智能体可以在它们头脑中的世界进行学习吗?   世界模型(World Model)是NIPS 2018获得口头报告的论文之一,也是谷歌AI和Deepmind 2019年力作深度规划网络 PlaNet的主要参考文献之一。这篇博文是对...
  • 性质:具有唯一和最小。 2. 关系的码和外码 码 定义:从多个候选码中选择一个作为查询、插入、删除元组的操作变量,被选用的候选码称为关系码(主键,码,关系键,关键字) 每个关系必定有且只有一个...
  • CSDN前1000名博

    万次阅读 多人点赞 2019-05-26 14:54:09
    简介 stpeace 排名:1 原创:2166 粉丝:7180 积分:181660 等级:10stpeace的专栏中国本博客供大家交流,欢迎各抒己见。博文中的内容禁止用 yuanmeng001 排名:2 原创:5286 粉丝:10660 积分:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,122
精华内容 100,448
关键字:

以性为主的世界