关系数据库是目前应用最广泛的数据库,它以关系模型作为数据的逻辑模型,采用关系作为数据的组织方式,其数据库操作建立在关系代数的基础上,具有坚实的数学基础。关系数据库具有较高的数据独立性,当数据的存储结构发生变化时,不会影响应用程序,这样可大大减少系统维护的工作量。
关系数据库概述
关系数据库的基本特征是使用关系数据模型组织数据,这种思想源于数学。1962年
CODASYL发表的“信息代数”就是最早将数学方法用于数据处理的。接着,1968年
David Child在IBM7090机上实现了集合论数据结构。随后,1970年IBM公司的E.F.
Codd在美国计算机学会会刊《 Communications of the ACM》上发表了题为“A
Relational Model of Data for shared Data
Banks”的论文,系统、严格地提出了关系模型,由此开创了数据库系统的新纪元。此后,
E.F. Codd连续发表了多篇论文,奠定了关系数据库的理论基础。
由于受到当时计算机软、硬件环境及其技术的制约,道直到20世纪70年代末,关系方法的理论研究和软件系统的研制才取得了重大 ...
最近在做一些微服务相关的设计,内容包括服务的划分,Restful
API的设计等。其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模块,使得业务可独立服务化。为了找寻答案,看了不少书籍和博客,在DDD中找到了一些思路,个人觉得受益匪浅,或许也可以受用于大家,特分享于此。
什么是DDD
软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开发。而在业务知识梳理的过程中,我们必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计的基本概念。
听起来这和传统意义的软件开发没啥区别,只是换了点新鲜的名词而已,其实不然。
软件开发 VS DDD
一般软件设计或者说软件开发分两种:瀑布式,敏捷式。
前者一般是项目经理经过大量的业务分析后,会基于现有需求整理出一个基本模型,再将结果传递给开发人员,这就是开发人员的需求文档,他们只需要照此开发便是。这种模式下,是很难频繁的从用户那里得到反馈,因此在前期分析时就 ...
互联网、人工智能等高科技行业在过去的十五年中始终保持着强劲的发展势头,不仅IT从业者人数逐年增长,编程学习者的数量更是迎来了井喷。程序员已成为时下最火热的职位之一,题主的困惑也是当今众多编程工作者和学习者广为关注的问题——英语对程序员来说究竟重不重要?又或者,有多重要?
事实上,对大多数程序员来说,在实际操作中,仅仅完成工作不需要精湛的英语水平,但需要掌握基本的英语词汇和编程中需要的专业句式。也就是说,作为一名基础的程序员,你的英语达到及格水平即可;但如果你想深造为高阶程序员,良好的英语能力是必须项。
时下不仅各大高校严格设定英语通识教育的考核制度,甚至为计算机相关专业开设独立的英语课程,中小学也注重英语式编程教学。
那么英语在程序员的工作中究竟扮演着什么样的角色?
众所周知,对于程序员来说,编程最重要的是算法和程序语法,而英语仅是实现算法的一门工具。编程起源于国外,无论在海外还是本土,绝大部分的编程语言都是英文版本。简单来说,编程(coding)就是用某编程语言实现算法、数据结构。
直观上来看,编程就是用有限的英文字符“组合拼凑”出一份代码,这涉及的英文词汇量很少。程序员会把绝大多数 ...
自从去年,开始用128g的手机,玩游戏什么王者,和平精英占用比较多,其他乱七八糟也不少,132个应用,基本常用了都在上面了,不用的倒是一大堆,也不想删,人懒。其实128g我觉得够用,本人并不喜欢拍照,库存较少,500张还是有的。
选择128G
为什么首先选择128g呢,其实128是目前比较容易接受的存储,6+128,对于大部分人来讲,是足够支持后面2年的正常使用,不论学生(视频剪辑类,ps修图类除外)来讲,128g应该勉强够用,定期清理缓存,还是很有必要的,可能你说你有学习课件,视频的,过来人都知道,视频一节(约40分钟)几百兆,超过1g的很少,一天不可能一直看视频,10g的空间一天,一周也就是70g,看完清理,或者搞个网盘,在线观看,我在校随意拉动网盘进度条是没什么问题。
选择256g
选择256g,自己也不知道能存点啥,比上面贵个几百块还是有的,内存大点,还是有必要的,对于重度游戏玩家什么王者,和平精英,cf手游,QQ飞车,崩坏,阴阳师,就光游戏都占用了接近40/50g,那还是搞个256的,还是要绝对顶配,12+256的才能配上你的生活使用。
还有就是特别喜欢拍照,库存上千+++的 ...
模型(
Model)是现实世界特征的模拟和抽象表达,其有助于人们更好地认识和理解客观世界中的事物、对象、过程等感兴趣的内容,例如汽车车模、飞机航模、建筑图纸、军事沙盘等。同样,为能表示和处理现实世界中的数据和信息,我们常使用数据模型(Data
Model)这个工具来模拟和抽象现实世界中的数据特征。因此,数据模型也是一种模型,它是对现实世界数据特征的抽象,描述的是数据的共性内容。
数据特征与数据模型组成要素
般而言,数据具有静态和动态两种特征。其中,数据的静态特征包括数据的基本结构、数据间的联系以及对数据取值范围的约束;数据的动态特征是指对数据可以进行符合定规则的操作。相应地,对现实世界数据特征进行抽象的数据模型,需要描述数据的静态特征与动态行为,并为数据的表示和操纵提供框架。因此,数据模型是用来描述数据的结构、定义在结构上的操纵以及数据间的约束的一组概念和定义。
通常,任何一种数据模型都是严格定义的概念集合,而这些概念必须能够精确地描述系统的静态特性、动态特性和数据约束条件。因此,数据模型通常由数据结构、数据操作和数据约束三个要素组成,分别如下。
(1)数据结构
数据结构描述的是系统的 ...
在一个组织的数据库系统中,有着各种不同类型的人员(或用户)需要与数据库打交道。他们从不同的角度以各自的观点来看待数据库,从而形成了数据库系统不同的视图结构。因此,考察数据库系统的结构可以有多种不同的层次或不同的视角。
若从数据库管理员(DBA)的视角来看,数据库系统可分为内部系统结构和外部体系结构,其中内部系统结构通常采用三级模式结构,而外部体系结构通常表现为集中式结构、分布式结构和并行结构等;若从数据库应用的用户(如应用程序的编写人员)的角度来看,目前数据库系统通常具有客户/服务器结构和浏览器服务器结构,这也是数据库系统整体的运行与应用结构。
数据库系统的三级模式结构
“从数据库管理员的角度来审视数据库系统,其内部基本上遵循美国
ANSISPARC数据库管理系统研究组提出的三级体系结构,即用户级、概念级和物理级。该结构也是目前各个不同数据库管理系统产品所遵循的体系结构准则。也就是说,尽管不同的数据库管理系统产品,可以使用不同的数据库语言,可以支持不同的数据模型,可以建立在不同的操作系统之上,但是们在体系结构上通常具有相同的特征,即釆用三级模式结构,并提供两层映像功能。
具体而言,数据 ...
ELK又被称为ELK
Stack,既然被称为Stack,说明它并不是某一种技术,它是Elastic公司推出的一整套日志收集、分析和展示的解决方案。ELK分别为3个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash
和 Kibana。下面我们分别来介绍这三个项目。
Elastic Search
Elastic
Search(简称ES)毫无疑问是ELK的核心,他是一个分布式的开源搜索和分析引擎,适用于几乎所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。说到Elastic
Search就不能不提Apache
Lucene。Lucene是一个高性能、全功能的全文检索引擎库,但其仅仅是一个库,需要使用Java将Lucene集成到应用程序中,并且需要一定的信息检索学知识才能了解其工作原理。而Elasticsearch
同样使用 Java 编写,其内部使用 Lucene 做索引与搜索,但它隐藏了Lucene
的复杂性,取而代之的提供一套简单一致的 RESTful
API,从而使全文搜索变得简单。同时,针对大数据场景,ES可以分布式部署于上千台节点,处 ...
分组交换基本原理
分组交换是目前计算机网络广泛采用的技术。分组交换需要将待传输数据(即报文)分割成较小的数据块,每个数据块附加上地址、序号等控制信息构成数据分组(
packet),每个分组独立传输到目的地,目的地将收到的分组重新组装,还原为报文。分组传输过程通常也采用存储一转发交换方式。
1961年,麻省理工学院(MT)的一名研究生 Leonard
Kleinrock,首次提出分组交换技术,并利用排队论证明了分组交换处理突发流量的网络传输的有效性。1964年,兰德公司的巴兰(
Paul
baran)开始研究应用分组交换技术,实现在军用网络上进行安全语音传输,得出的解决方法就是在计算机网络通信中把要发送的信息分割为“信息块”,每个信息块分别传输。与此同时,英国国家物理实验室(
National Physical Laboratory.,NPL)的戴维斯( Donald
Davies)也在自己独立的研究中得出类似结论。巴兰提出的“信息块”概念在戴维斯的研究中被称为分组,相应地这种通信技术被称作分组交换,目前世界上广泛使用的分组交换概念即由此而来。
分组交换是报文交换的一种改进,它将一个完整 ...
当主机间交换的数据具有随机性和突发性时,采用电路交换方法的缺点是信道容量和有效时间的浪费,于是提出了报文交换的方法。报文交换也称为消息交换,其工作过程为:发送方把要发送的信息附加上发送/接收主机的地址及其他控制信息,构成一个完整的报文(
Message)。然后以报文为单位在交换网络的各结点之间以存储转发的方式传送,直至送达目的主机。一个报文在每个结点的延迟时间,等于接收报文所需的时间加上向下一个结点转发所需的排队延迟时间之和。
可以看出,报文交换事先不需要建立连接,发送方组装好报文之后即可向相邻的交换结点发出,交换结点收到整个报文并且检查无误后,暂时存储报文,然后利用路由选择找出需要转发的下一个结点的地址,再把整个报文转发给下一个结点。交换结点的这种接收-暂存转发的工作方式,就称为“存储转发”交换方式。只有当报文被转发时才占用相应的信道,不存在电路交换中通信双方空闲时信道也要被占用的情况。因此,相对电路交换信道而言,报文交换线路利用率高。报文交换网络中交换结点需要缓冲存储,报文需要排队,因此会导致报文经过网络的延迟时间变长并且不固定,对于实时通信而言会容易出现不能满足速度要求的情况。有 ...
电路交换是最早出现的一种交换方式,距今已有100多年的历史,而电话网络则是最早、最大的电路交换网络。在电路交换网络中,首先需要通过中间交换结点为两台主机之间建立一条专用的通信线路,称为电路,然后再利用该电路进行通信,通信结束后再拆除电路。电话网络的电话拨号呼叫过程就是请求建立电路的过程。电路交换网络在建立电路时,为整个会话在沿线所有链路上都预留一个专用信道,传输速率恒定。在这个通信过程中,交换设备对通信双方的通信内容不做任何干预,即对数据的编码、符号、格式和传输控制顺序等没有影响。利用电路交换进行通信包括建立电路、传输数据和拆除电路3个阶段。
建立电路
传输数据之前,必须建立一条端对端的电路,这个电路建立过程实际上就是一个个交换结点的接续过程。需要指出的是,这个电路可能不是通信双方之间直接的连接,而是通过若干个中间交换结点实现的连接如果两个主机之间需要进行通信,那么发送主机需要先发出呼叫请求信号给接收主机,然后经过若干结点沿途接通一条物理链路后,再由接收主机发出应答信号给发送主机,这样双方之间的电路连接就建立成功了。只有电路建立成功之后,才能进入数据传输阶段。其中,电路交换的这种“接 ...
