冗余系统

14 个实用的数据库设计技巧

孤者浪人 提交于 2019-11-28 20:30:59
点击上方“ 后端技术精选 ”,选择“置顶公众号” 技术文章第一时间送达! 作者:echozh juejin.im/post/5d5b4c6951882569eb570958 原始单据与实体之间的关系 主键与外键 基本表的性质 范式标准 通俗地理解三个范式 要善于识别与正确处理多对多的关系 主键PK的取值方法 正确认识数据冗余 E--R图没有标准答案 视图技术在数据库设计中很有用 中间表、报表和临时表 完整性约束表现在三个方面 防止数据库设计打补丁的方法是“三少原则” 提高数据库运行效率的办法 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中

什么是高可用?

心已入冬 提交于 2019-11-28 07:10:43
一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。 很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。 百度的搜索首页,是业内公认高可用保障非常出色的系统,甚至人们会通过 www.baidu.com 能不能访问来判断“网络的连通性”,百度高可用的服务让人留下啦“网络通畅,百度就能访问”,“百度打不开,应该是网络连不上”的印象,这其实是对百度HA最高的褒奖。 二、如何保障系统的高可用 我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。 保证系统高可用,架构设计的核心准则是:冗余。 有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。 接下来我们看下典型互联网架构中,如何通过冗余+自动故障转移来保证系统的高可用特性

CRC(循环冗余校验)

与世无争的帅哥 提交于 2019-11-28 05:57:32
在线计算: http://www.ip33.com/crc.html 原文链接:https://blog.csdn.net/liyuanbhu/article/details/7882789 写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式。 其实,在网上有一篇介绍CRC 算法的非常好的文章,作者是Ross Williams,题目叫:“A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS”。我常将这篇文章推荐给向我询问CRC算法的朋友,但不少朋友向我抱怨原文太长了,而且是英文的。希望我能写篇短点的文章,因此就有了本文。不过,我的水平比不了Ross Williams,我的文章肯定也没Ross Williams的写的好。因此,阅读英文没有障碍的朋友还是去读Ross Williams的原文吧。 本文的读者群设定为软件开发人员,尤其是从事嵌入式软件开发的程序员,而不是专业从事数学或通讯领域研究的学者(我也没有这个水平写的这么高深)。因此

关于数据校验纠错算法

笑着哭i 提交于 2019-11-27 19:40:20
最近对于数据传输的噪音损耗问题的解决方案查了些资料 就此做一个总结:    数据损坏     因为网线被老鼠啃了或者硬盘摔地上了导致数据错了     关于数据损坏的问题其实不限于网络传输方面,可以涉及到所有和数据相关的方面,比如文件解压,网络通讯,保密数据的校验(数据签名)等等    错误校验     即检验某一段数据是否有误。     因为是不是有误光凭数据本身不可能知道,所以必须加上附加的认证方法     当然最简单的认证方法就是再传一次数据,拿着数据一个个对着原本的数据对照一下。。。不过这样不说太麻烦,如果要实现这个方法,第二次传输这个数据的时候,难以保证这个数据是不是也出现了错误     另一方面,显然数据越短,这段数据出现错误的概率越小,因为比特出错概率(BER)是不变的。所以如果可以把这个认证的数据(校验码)压缩成一段很短的数据就可以减少校验码出错的情况了     比如奇偶校验(Parity Check) 或者说,数1校验       奇偶校验制定了一个协议,规定数据中1的个数只能是偶数       如果原始数据1是奇数,则加一个1在最前面;反之则加一个0在前面。       如 0 110101 和 1 1010010 都是符合规定的。 很显然这个第一位就是校验码。       那么如果数据出了错误,某个0变成1或者1变成0,那么接收者数一遍1发现不是偶数个

mysql 范式和反范式

拟墨画扇 提交于 2019-11-27 16:22:43
第一范式(1NF) 强调的是列的原子性,即列不能够再分成其他几列。 第二范式 (2NF) 首先是 2NF,另外包含两部分内容一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 第三范式 (3NF) 首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 第三范式通常已经可以满足业务需求了,表之间的关系也比较清楚了,容易维护。但是为什么要反范式呢? 首先我们需要了解到定义数据库范式的历史背景,在20世纪70年代到80年代范式基本完善定型。在那个时候的系统下:一个硬盘的大小有限,一般也就几百兆(价格也比较高),上网的人也少,所以范式的理论强调减少依赖,降低冗余节省空间的使用。而现在最普通的硬盘都是500G,大一点的就上T了而且价格便宜,同时上网人数也增多了,数据库面临则高并发,业务逻辑复杂,低延迟的要求。很难在遵循这范式的基础上进行数据库设计开发,那么适当的降低范式,增加冗余,用空间来换时间是值得的。最低可以把范式降低到1NF。 通常在设计数据库时遵循以下原则: 1.核心业务使用范式。在类似交易有关的这种敏感核心业务中,强调数据安全和一致性,需要遵循范式保证数据唯一和一致。具体什么是核心业务视情况而定。 2.弱一致性需求——反ACID

设备选型

徘徊边缘 提交于 2019-11-27 11:38:40
一.交换机的性能指标有很多,背板带宽、交换容量和包转发率这三个最重要的参数。 1. 背板带宽( BackPlane Capacity ) 背板带宽是模块化交换机专有的概念。它是指交换机背板总线的带宽,是由机箱( Chassis )所决定的。背板带宽代表了引擎与业务板之间所能传输的最大数据量,单位为 Gbps 。 2. 交换容量( Switch Capability ) 交换容量是指引擎 / 交换矩阵或转发芯片的交换能力。与背板带宽一样,单位也是 Gbps 。交换容量与背板带宽的区别在于:交换容量是描述的引擎等有源部件,背板带宽描述的是无源部件——背板总线。对于固定配置交换机而言,因为其没有背板总线,固没有背板带宽这一概念。对于模块化交换机,背板带宽由机箱决定,交换矩阵由引擎决定。举个例子, Cisco 6506-E 机箱的背板带宽是 480Gbps , SUP720 引擎的交换容量是 720Gbps ,所以若 6506-E 机箱配备 SUP720 引擎,它的总带宽也只能是 480Gbps 。 3. 包转发率( Throughout ) 包转发率是指在加载负荷的情况下,设备能成功转发数据的效率。所谓成功转发,仅表示不丢包,不表示不出错。在描述一个设备的包转发率时必须指明是在多大的加载负荷情况下的值,业界一般选用 64byte 的包作为加载负荷。不同厂商对包转发率有不同的称谓

TCP拥塞控制

非 Y 不嫁゛ 提交于 2019-11-27 10:58:45
TCP拥塞控制 出现拥塞           ∑对资源的需求 > ∑可用资源 拥塞控制是防止过多的数据注入到网络中,使网络中的路由器或链路不过载,这是一个全局性的。 流量控制是点对点的通信量的控制,是端到端问题。 拥塞控制方法 在最宽泛的级别上,我们可根据网络层是否为运输层拥塞控制提供显示帮助,来区分拥塞控制方法。 端到端拥塞控制 在这个方法中,网络层没有为运输层拥塞控制提供显示支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来推断。TCP必须通过端到端的方法来解决也拥塞控制,因为IP层不会向端系统提供有关网络拥塞的反馈信息。 TCP报文段的丢失(通过超时或3次冗余确认得知)被认为是网络出现拥塞的一个迹象 ,TCP会相应地减小其窗口长度。在TCP拥塞控制的一些最新建议也会使用增加的往返时延值作为网络拥塞程度增加的指示。 网络辅助的拥塞控制 在网络辅助的拥塞控制中,网络层构件(即路由器)向发送方提供有关网络中拥塞状态的显示反馈信息。 拥塞信息从网络反馈到发送方通常有两种方式:①直接反馈信息由网络路由器发给发送方,这种通知方式常采用了一种 阻塞分组(choke packet) 的形式(含义为:“我阻塞了”)②显示拥塞通知(Explicit Congestion Notification,ECN)

数据库设计原则

我与影子孤独终老i 提交于 2019-11-27 01:39:52
1. 原始单据与实体之间的关系   可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。   〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。        这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键   一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键   (因为它无子孙), 但必须要有外键(因为它有父亲)。   主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专   家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核   心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质   基本表与中间表、临时表不同,因为它具有如下四个特性:    (1) 原子性。基本表中的字段是不可再分解的。    (2) 原始性。基本表中的记录是原始数据(基础数据

数据库设计中常见表结构分析

不想你离开。 提交于 2019-11-26 22:44:23
一、树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。 设计结构: 名称 类型 约束条件 说明 type_id int 无重复 类别标识,主键 type_name char(50) 不允许为空 类型名称,不允许重复 type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值 type_layer char(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数 这样设计的好处就是遍历方便,只需要一个检索即可,通过设置type_layer即可设定遍历顺序,000000为3层,若要求多则可增加,每一层允许最多99个子类。010101表示为第三层。 检索过程:SELECT * FROM Type_table_2 ORDER BY type_layer 列出记录集如下: type_id   type_name   type_father   type_layer 1       总类别       0    000000 2       类别1       1   

关于RAID与SCSI的一些基本概念

不想你离开。 提交于 2019-11-26 10:13:43
RAID简介 内嵌微处理器的磁盘子系统通常称为R A I D系统。R A I D阵列的可用容量总小于成员磁盘的总量。 一、RAID 0(分块)是简单的、不带有校验的磁盘分块,本质上它并不是一个真正的R A I D,因为它并不提供任何形式的冗余。假如RAID 0的磁盘失败,那么,数据将彻底丢失。为了在RAID 0情况下恢复数据,唯一的办法是使用磁带备份或者镜像拷贝。 二、RAID 1(镜像)是非校验的R A I D级。 三、RAID 2(专有磁盘的并行访问)的定义涉及R A I D控制器中的错误校验电路。这个功能已经被集成到磁盘驱动器中,虽然便宜,但效率却不高。因此, RAID 2没有形成产品。 四、并行访问R A I D都属于R A I D 3。R A I D 3(使用专有校验磁盘的同步访问)子系统将数据分块存放到阵列中的所有驱动器,将校验数据写到阵列中的一个另外的校验磁盘, R A I D 3被认为是校镽 A I D。 五、RAID4(使用专用校验磁盘的独立访问)是一种独立访问的R A I D实现,它使用一个专用的校验磁盘。与RAID 3不同的是,RAID 4有更大量的分块,使多个I / O请求能同时处理。虽然它为读请求提供了性能的优势,但RAID 4的写开销特别大,因为在每次读、修改和写周期中,校验磁盘都被访问两次。 六、RAID 5(使用分布式校验的独立访问