数据库分类及基础概念
数据库分类及基础概念
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.数据库(Database)概述
1>.什么是数据库
数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。
我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失,所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。说白了,数据库就是存储数据的仓库。
2>.数据库的诞生
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1951:
Univac系统使用磁带和穿孔卡片作为数据存储。
1956:
IBM公司在其Model 305 RAMAC中第一次引入了磁盘驱动器
1961:
通用电气(GE)公司的Charles Bachman开发了第一个数据库管理系统——IDS
1969:
E.F. Codd发明了关系数据库。
1973:
由John J.Cullinane领导Cullinane公司开发了 IDMS——一个针对IBM主机的基于网络模型的数据库。
1976:
Honeywell公司推出了Multics Relational Data Store——第一个商用关系数据库产品。
1979:
Oracle公司引入了第一个商用SQL关系数据库管理系统。
1983:
IBM推出了DB2数据库产品。
1985:
为Procter & Gamble系统设计的第一个商务智能系统产生。
1991:
W.H.“Bill” Inmon发表了”构建数据仓库”。
计算机的发明是为了做科学计算的,而科学计算需要大量的数据输入和输出。
早期,可以使用打孔机的控,灯泡的亮灭表示数据状态,用这些状态输入,输出数据。
1940年,数据可以存储在磁带上,顺序的读取写入磁带。
1956年IBM发明了磁带驱动器这个革命性产品,支持随机访问。
随着信息化时代的到来,有了硬件存储技术的发展,有大量的数据需要存储和管理。
![](https://img2018.cnblogs.com/blog/795254/201911/795254-20191122190103730-1999463090.png)
3>.数据的时代
1.涉及的数据量大
2.数据不随程序的结束而消失
3.数据被多个应用程序共享
4.大数据时代到来
4>.数据库DBMS的发展史
萌芽阶段:文件系统
使用磁盘文件来存储数据
初级阶段:第一代数据库
出现了网状模型、层次模型的数据库
中级阶段:第二代数据库
关系型数据库和结构化查询语言
高级阶段:新一代数据库
“关系-对象”型数据库
二.数据管理系统概述
1>.文件管理系统的缺点
1.编写应用程序不方便
2.数据冗余不可避免
3.应用程序依赖性
4.不支持对文件的并发访问
5.数据间联系弱
6.难以按用户视图表示数据
7.无安全控制功能
2>.数据库管理系统的优点
1.相互关联的数据的集合
2.较少的数据冗余
3.程序与数据相互独立
4.保证数据的安全、可靠
5.最大限度地保证数据的正确性
6.数据可以并发使用并能同时保证一致性
3>.数据库管理系统
1.数据库是数据的汇集,它以一定的组织形式存于存储介质上
2.DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
3.DBA:负责数据库的规划、设计、协调、维护和管理等工作
4.应用程序指以数据库为基础的应用程序
4>.数据库管理系统的基本功能
1.数据定义
2.数据处理
3.数据安全
4.数据备份
三.数据库的种类
1>.网状数据库
最早出现的是网状DBMS,1964年通用电气公司的Charles Bachman成功地开发出世界上第一个网状IDS,也是第一个数据库管理系统,IDS 具有数据模式和日志的特征,只能在GE主机运行。 网状数据库是采用网状原理和方法,以网状数据模型为基础建立的数据库。一般是指由网状数据库管理系统产生的网状数据库系统。网状数据模型是以记录类型为结点的网络结构,即一个结点可以有一个或多个下级结点,也可以有一个或多个上级结点,两个结点之间甚至可以有多种联系,例如“教师”与“课程”两个记录类型,可以有“任课”和“辅导”两种联系,称之为复合链。两个记录类型之间的值可以是多对多的联系,例如一门课程被多个学生修读,一个学生选修多门课程。 网状数据库可以很直观的表现出数据和数据之间的关联关系,但是也带来了数据管理的复杂性,因此在企业中并不没有流行该软件的使用。 博主推荐阅读: https://baike.baidu.com/item/%E7%BD%91%E7%8A%B6%E6%95%B0%E6%8D%AE%E5%BA%93/463319?fr=aladdin#ref_[1]_24349 https://wiki.mbalib.com/wiki/%E7%BD%91%E7%8A%B6%E6%95%B0%E6%8D%AE%E5%BA%93
2>.层次数据库
层次模型数据库系统是最早研制成功的数据库系统,这种数据库最成功的典型是IMS。 IMS的全称时Information Management System,由IBM公司研制成功。 IMS于1969年投入运行,最早的版本有IMS/360-1和IMS/360-2。较近的版本有IMS/VS DL/1,它是在操作系统DOS/VS(Disk Operation System/Virtual Storage)支持下运行。 以树形结构表示实体及其之间的联系,关系只支持一对多。 博主推荐阅读: https://baike.baidu.com/item/%E5%B1%82%E6%AC%A1%E6%95%B0%E6%8D%AE%E5%BA%93/10915947?fr=aladdin
3>.数据库系统的架构
1.单机架构
2.大型主机/终端架构
3.主从式架构(C/S)
4.分布式架构
4>.关系型数据库(RDBMS,全称"Relational DataBase System")
1.关系型数据库的由来 虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享的问题,但是在数据独立性和抽象级别上仍有很大缺陷。用户在对这两种数据库进行存取时,仍然需要明确数据的结构,指出存取路径,而关系数据库就可以较好的解决这些问题。 2.关系型数据库介绍 关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如在新员工入职的时候公司都会给你一个编号,这个编号和该员工是一一对应的,这就是一个二元关系,在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类,合并,连接或者选取等运算实现数据的管理(结构化查询语言,sql语句来对数据进行处理)。 关系型数据库诞生至今已经已有40多年了(数据库诞生已经60多年了),从理论产生发展到现实产品,例如:大家最常见的myql和oracle数据库,oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而mysql也会不容忽视的数据库,以至于被oracle重金收购了。(2008年mysql【10亿美金】被sun收购了,之后sun公司又被oracle收购了) 3.关系型数据库表格之间的关系举例: 员工信息表: 员工ID 姓名 年龄 所在部门 职位 520 尹正杰 27 基础架构 大数据SRE工程师 4.关系型数据库相关常用术语 关系 : 关系就是二维表,其中:表中的行、列次序并不重要 行row: 表中的每一行,又称为一条记录 列column: 表中的每一列,称为属性,字段 主键Primary key: 用于惟一确定一个记录的字段,一张表中仅能存在一个主键 域domain: 属性的取值范围,如,性别只能是‘男’和‘女’两个值 5.博主推荐阅读: https://baike.baidu.com/item/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/8999831?fr=aladdin
5>.非关系型数据库(NOSQL)
1.非关系型数据库也被称为NOSQL数据库,请读者注意,nosql的本意是“not only sql”,指的是非关系型数据库,而不是no sql的意思,因此。Nosql数据库产生并不是要彻底的否定关系型数据库,而是作为传统关系型数据库的一个有效的补充,NoSql传统数据库在特定的场景下可以发挥出难以想象的高效率和高性能。 2.随着互联网web2.0(以用户为主体,上传下载,发布帖子,博客等动态应用不较多。)网站的兴起,传统的关系型数据库在应付web2.0网站,特别是对于规模日益扩大的海量数据,超大规模的高并发的微博,微信,SNS类型的wen2.0纯动态网站已经显得力不从心,暴露了很难克服的问题,例如:传统的关系型数据库IO瓶颈,性能瓶颈都难以有效突破,于是开始了大批针对特定场景,以高性能和使用便利为目的的功能特异化数据库产品,Nosql类的数据库就是这样的情景中诞生并得到非常迅速的发展。 3.Nosql是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统局面。Nosql数据库存储不需要固定的表结构,通常也不存在连接操作,在大数据存取上具备关系型数据库无法比拟的性能优势,还术语(Nosql)在2009年初得到了广泛的认同。 4.当今应用体系结构需要数据存储在横向伸缩性上有能够满足需求。而Nosql存储就是为了实现这个需求而诞生的。googel的bigtable与amazon(亚马逊)的dynamo是非常成功的商业nosql实现。一些开源的nosql体系,如facebook的Cassandra,apache的HBase,也得到了广泛认同,Redis,mongodb也逐渐的越来越受到各大类中小型公司的欢迎和追捧。 5.博主推荐阅读: https://baike.baidu.com/item/NoSQL/8828247?fromtitle=%E9%9D%9E%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93&fromid=6376860&fr=aladdin
6>.数据库排名
数据库排名地址:https://db-engines.com/en/ranking
四.常用关系型数据库产品介绍
1>.Oracle数据库
拉里·埃里森(Larry Ellison)仔细阅读了IBM的关系数据库的论文,敏锐意识到在这个研究基础上可以开 发商用软件系统。他们几个创始人决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央 情报局做过的项目名。Oracle前身叫SDL,由Larry Ellison 和另外两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售。 Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有数一数二。 1979年发布了ORACLE 2.0版本(实际是1.0) 1983年发布了Oracle v3 1984年发布了Oracle v4 1985年发布了Oracle v5 1988年,Oracle v6引入了行级锁等新技术,然而这是个不稳定的版本。 直到1992年的时候,Oracle v7才逐渐稳定下来,并取得巨大成功。 2001年的9i版本被广泛使用。 2007年7月12日,甲骨文公司在美国纽约宣布推出数据库Oracle 11g,这是Oracle数据库的最新版本。Oracle介绍说,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。Oracle 11g在安全,XML DB,备份等方面得到了很大提升。 2009年4月20日,甲骨文公司宣布每股9.50美元,总计74亿美金收购SUN(计算机系统)公司。 2010年1月成功收购SUN公司。 2013年,甲骨文超过IBM,成为继微软之后的全球第二大软件公司。 Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供商与服务商。 Oracle主要应用范围: 传统大企业,大公司,政府,金融,证券等等。(互联网公司一般不用,如果入职互联网公司的话建议不要学习它,而且会这个数据库的人员几乎已经饱和。) 版本升级:Oracle8i,Oracle9i,Oracle10g,Oracle11g 博主推荐阅读: https://baike.baidu.com/item/%E7%94%B2%E9%AA%A8%E6%96%87%E5%85%AC%E5%8F%B8/430115?fromtitle=Oracle&fromid=301207&fr=aladdin https://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html(官网下载地址) https://www.oracle.com/technetwork/cn/database/enterprise-edition/documentation/index.html(官方相关文档)
2>.MySQL数据库
MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司。 1985年几个瑞典人为大型零售商的项目设计了一种利用索引顺序存取数据的软件,这就是MyISAM的前身。 1996年,MySQL 1.0发布,随后发布了3.11.1版本,并开始往其它平台移植。 2000年MySQL采用 GPL协议开源。MySQL 4.0开始支持MyISAM、InnoDB引擎。 2005年10月,MySQL 5.0成为里程碑版本。 在2008年1月16号被Sun公司收购,后Sun公司又被oracle公司收购。 2009年1月,在Oracle收购MySQL之前,Monty Widenius担心收购,就从MySQL Server 5.5开始一条新的GPL分支,起名MariaDB。 MySQL的引擎是插件化的,可以支持很多种引擎: MyISASM,不支持事务,插入、查询速度快。 InnoDB,支持事务,行级锁,MySQL 5.5起的默认引擎。目前MySQL被广泛应用在Internet上的大中小行网站中。由于其体积小,速度快。总体拥有成本低。尤其是开源代码这一特点,许多大中小型网站为了降低网站总体拥有成本而选择了MySQL。 MySQL数据库主要应用范围: 互联网领域,大中小型网站,游戏公司,电商平台等等。 博主推荐阅读: https://baike.baidu.com/item/mySQL/471251?fr=aladdin MySQL主页(https://www.oracle.com/mysql/) 下载主页面(https://www.mysql.com/downloads/) 社区资源下载页面(https://dev.mysql.com/downloads/) MySQL社区版下载页面(https://dev.mysql.com/downloads/mysql/)
3>.MariaDB数据库
MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权许可。开发这个MariaDB数据库分支的可能原因之一是:甲骨文公司被收购了MySQL后,有将MySQL闭源的潜在风险,因此MySQL开源社区采用分支的方式来避开这个风险。 开发MariaDB数据库的目的是完全兼容MySQL数据库,包括API和命令行,使之能轻松成为MySQL的 替代品。在存储引擎方面,使用XtraDB来代替MySQL的innoDB。MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入了Oracle的手中。MariaDB数据库的名称来自MySQL的创始人Michael Widenius的女儿Maria的名字。 MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的XtraDB(InnoDB的变体)。这个版本还包括了PrimeBase XT(PBXT)和Federated存储引擎。 MariaDB数据库直到5.5版本,均依照MySQL的版本发行。因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能。 博主推荐阅读: https://baike.baidu.com/item/mariaDB/6466119?fr=aladdin https://mariadb.org/(官网地址)
4>.SQL Server数据库
Microsoft SQL Server 是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高。可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操作系统紧密集成,不论是应用程序开发速度还是系统事物处理运行速度,都能得到较大的提示。对于在Windows平台上开发各种企业级信息管理系统来说,不论是C/S(客户接/服务器)架构还是B/S(浏览器/服务器)架构, SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行。 1987年。微软和IBM合作开发完成OS/2,IBM在其销售的OS/2 ExtendedEdition 系统中绑定了 OS、2 Database Manager,而微软产品线中缺少数据库产品,为此,微软将项目投向Sybase,同Sybase签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server1.0版。Microsoft在与Sybase分道扬镳后,随后在其6.05与7.0版本中重写了核心数据库系统,如今SQL Server 2008已经到来。 主要应用范围:部分企业电商(央视购物),使用weindows服务器平台的企业。 windows开发平台:".net","c#","Sql Server“ web服务器:“IOS” linux平台:“apache”,“nginx”,“php”,“java”,”MySQL“,”Oracle“ 博主推荐阅读: https://baike.baidu.com/item/Microsoft%20SQL%20Server/2947866?fromtitle=sql%20server&fromid=245994&fr=aladdin https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
5>.Access数据库
美国Microsoft公司与1994年推出的微机数据库管理系统。它具有界面友好,易学易用,开发简单,接口灵活等特点。是典型的新一代桌面关系型数据库管理系统。它结合了Microsoft Jet Database Engine 和图形用户界面两项特点,是Microsoft Office的成员之一。 Access能够存取Access/Jet,Microsoft SQL Server,Oracle,或者任何ODBC兼容数据库的资料。Access界面友好而且易学易用,作为Office套件的一部分,可以与Office集成,实现无缝连接Access提供了表(Tables),查询(Query),窗体(From),报表(Report),宏(Macro),模块(Module)等用来建立数据库系统的对象。提供了多种想到,生成器,模板,把数据存储,数据查询,界面设计,报表生成等操作规范化。 Access是入门小型左面数据库,性能安全性都很一般,可供个人管理小型网站之用。Access部署数据库语言,只是一个数据库程序。目前最新版本是Office2007.其主要特点如下: 1>.完善的管理各种数据库对象,具有强大的数据组织,用户管理,安全检查等功能。 2>.强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASE,FoxBASE的统称)数据库系统无法实现的客户服务器(Client/Server)结构和相应的数据库管理安全机制,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。 3>.可以方便的生成各种数据对象,利用存储的数据建议窗体和报表,可视性好。 4>.作为Office套件的一部分,可以与Office集成,实现无缝连接。 5>.能够利用Web检索和发布数据,实现与Intetnet的连接,Access主要适用于中小型应用系统,或作为客户机、服务器系统的客户端数据库。 早期应用领域:小型程序系统asp+access系统,留言板,校友录等等。 博主推荐阅读: https://baike.baidu.com/item/Microsoft%20Office%20Access/7748166?fromtitle=ACCESS%E6%95%B0%E6%8D%AE%E5%BA%93&fromid=7894751&fr=aladdin https://www.microsoft.com/en-us/download/details.aspx?id=13255
6>.PostgreSQL数据库
PostgreSQL(简称pgSQL)是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。PostgreSQL最初设想于1986年,当时被叫做Berkley Postgres Project。该项目一直到1994年都处于演进和修改中,直到开发人员Andrew Yu和Jolly Chen在Postgres中添加了一个SQL(Structured Query Language,结构化查询语言)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。
1996年,再次对Postgres95做了较大的改动,并将其作为PostgresSQL6.0版发布。该版本的Postgres提高了后端的速度,包括增强型SQL92标准以及重要的后端特性(包括子选择、默认值、约束和触发器)。
PostgreSQL是一个非常健壮的软件包,有很多在大型商业RDBMS中所具有的特性,包括事务、子选择、触发器、视图、外键引用完整性和复杂锁定功能。另一方面,PostgreSQL也缺少商业数据库中某些可用的特性,如用户定义的类型、继承性和规则。从用户的角度来讲,PostgreSQL惟一不具备的主要特性就是外部连接,在今后的版本中会将其加入。
PostgreSQL提供了两种可选模式。一种模式保证如果操作系统或硬件崩溃,则数据将保存到磁盘中,这种模式通常比大多数商业数据库要慢,这是因为它使用了刷新(或同步)方法;另一种模式与第一种不同,它不提供数据保证,但它通常比商业数据库运行得快。遗憾的是,还没有一种折中的模式:既提供一定程度的数据安全性,又有较快的执行速度。今后的版本将会提供这种模式。
pgSQL号称性能最好的数据库,自从被RedHat公司收购后,更名为EnterpriseDB。PgSQL和号称最流行的MySQL数据库现在均在处于用户量上涨的状态。
应用领域:在国外的确是很流行的数据库,比如大数据集群的CDH和HDP默认使用的数据库就是pgSQL。
博主推荐阅读:
https://baike.baidu.com/item/PostgreSQL/530240?fr=aladdin
https://www.postgresql.org/
7>.其他不常用关系型数据库
DB2(IBM),Informix,Sybase等。这些关系型数据库逐步的淡出了普遍运维的视线,特别是互联网公司几乎见不到,因此我们这里就不多介绍了。
五.非关系型数据库产品介绍
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1>.键值(key—value)存储数据库
键值数据库就类似传统中语言中使用的哈希表。开源通过key来添加,查询,或者删除数据,因为Key使用主键访问。所以会获得很高的性能及扩展性。
键值数据库主要是使用一个哈希表,这个表中有定义的一个而定的键和一个指针指向特定的数据,key/value模型对于iT系统来说的优势在于简单,易部署,高并发。
典型产品:Memcached(支持内存); Redis(持久化的数据库,支持内存数据,也支持磁盘的数据); MemchedDB; Berkeley DB
2>.列存储(column-oriented)数据库
列存储数据库将数据库存储的列族(column family)中,一个列族存储经常被一起查询的相关数据,举个例子,比如我们又一个公司员工信息的类,我们通常会一起查他们的姓名和年龄而不是工资,这种情况下,姓名和年龄就是会被存放人一个列族中。而薪资则在另一个列族中
这部分数据库通常是用来应付分布式存储的海量数据。键值仍然存在,但是他们的特点是指向了多个列。这些列是由列家族带来的安排的、
典型产品:Cassandra【360公司用】; HBase【新浪】(月薪低于1.5万的运维就没有必要玩他了),一般的中小型也用不了
3>.面向文档(Document-Oriented)数据库
文档型数据库的灵感来自于lotus notes办公软件的。而且它同第一种键值存储相类似。该类型的数据库模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON,文档型数据库可以看作是键值数据库的升级版本,允许之间嵌套键值。而且文档型数据库逼键值数据库的查询效率更好。
典型产品:MongoDB(建议了解下),CouchDB
4>.图像(Graph)数据库
图形数据库允许我们将数据库以图的方式存储。实体被称作为顶点,而实体之间的关系则会被作为边。比如我们又三个实体, steve,jobs,apple和next。则会有两个"Founded by"的边将apple和next连接到steve jobs。
典型产品:Neo4J,infoGrid
1>.Memcached(key-value)
Memcached是一个开源的,高性能的,具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJornal的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。注意:Memcache是这个项目的名称,而Memchched是服务器端的主程序文件名。 缓存一般用来保存一些经常被存取的对象或数据(例如:浏览器会把经常访问的网页缓存起来一样),通过缓存来存取对象或数据要比在磁盘上存取快很多,前者是内存,后者是磁盘,Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存存在memcached的内存中,这些被缓存的数据被程序通过API的方式被存取,memcached里面的数据就像一张巨大的HASH表,数据以key-value对的方式存在,Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出速度更快的可扩展的web应用。(官方网站:http://memcached.org/) 由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事物恢复能力,持久化数据存储能力和分布式复制能力,Memcached非常适合需要超高性能读写速度,持久化保存的应用场景,但是最近几年逐渐被其他的持续化产品替代例如:redis。(所以如果你想要去新浪面试话,这个东西是你和面试官必须提到的东西哟~不然你可能进不去~哈哈~) 博主推荐阅读: https://memcached.org/ https://github.com/memcached/memcached/wiki
2>.redis(key-value)
Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串),list(列表),set(集合)和zset(有序集合)等。这些数据类型都支持push/pop,add/remove及取交集,并集和差集更丰富的操作,而且这些操作都是原子性的。在此基础上。redis支持各种不同方式的排序。与memcached一样。为了保证效率,redis的数据都是缓存在内存中。区别会周期性的把更新的数据写入磁盘或者把修改操作写入追加记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。它提供了Python.Ruby,Rrlang,PHP客户端,使用很方便.(官网:https://redis.io/documentation) redis特点: 1>.支持内存缓存,这个功能相当于memched。 2>.支持持久化,这个功能相当于memcachedb,ttserver。 3>.数据类型更丰富。比其他key-value库功能更强。 4>.支持集群,分布式。 5>.支持队列等特殊功能。 应用:缓存从存取memcached更改存取redis. 博主推荐阅读: https://baike.baidu.com/item/Redis/6549233?fr=aladdin https://redis.io/ https://www.cnblogs.com/yinzhengjie/tag/Redis/
3>.MongoDB(Document-oriented)
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最想关系数据库的。他支持的数据结构非常松散,类似json和bjson格式,因此可以存储比较复杂的数据类型,Mongodb最大的特点是他支持的查询语言非常强大,其语法有类似于面向对象的查询语言,几乎可以实现类似关系数据库单标查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能,易部署,易使用,存储数据非常方便。 MongoDB主要功能特性: 1>.面向集合存储,易存储对象类型的数据; “面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema), 2>.模式自由; 模式自由(schema-free),意味着对于存储在mogodb数据库中的文件,我们不需要知道他的任何结构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。 3>.支持动态查询; 4>.支持完全索引,包含内部对象 5>.支持查询; 6>.支持复制和故障恢复; 7>.使用高效的二进制数据存储,包括大型对象(如视频等); 8>.自动处理碎片,以支持云计算层次的扩展性; 9>.支持Ruby,Python,Jave,C++,Php等多种语言; 10>.文件存储格式为BSON(一种JSON的扩展); BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一表示一个文档,为字符串类型,而值则可以是各种复杂的文档类型。 11>.可以通过网络访问 MongoDB服务端可运行在Linux,Windows或OS X平台,支持32位和64位应用,默认端口为27017.推荐运行在64位平台。 MogoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。 博主推荐阅读: https://docs.mongodb.com/manual/contents/ https://www.runoob.com/mongodb/mongodb-tutorial.html
4>.Cassandra(column-oriented)
Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据,Facebook,360目前在使用此系统。 Apache Cassandra主要特性: 1>.分布式; 2>.基于colum的结构化; 3>.高伸展性; Cassandra的主要忒单就是他不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取,对于一个Cassandra集群来说,扩展性嫩是比较简单的事情。只管在集群里面添加节点就可以了。 Cassandra是一个混合型的非关系的数据库,类似于google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目,它是一个网社交与计算方面理想的数据库,以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心话的存储。很多方面都可以称职为Dynamo2.0 博主推荐阅读: http://www.cassandra.org/ https://baike.baidu.com/item/Apache%20Cassandra/10535492?fr=aladdin
5>.HBase
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。 就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储(HDFS)一样,HBase在Hadoop之上提供了类似于Bigtable的能力。 HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。 Hadoop生态系统发展到现在,存储层主要由HDFS和HBase两个系统把持着,一直没有太大突破。在追求高吞吐的批处理场景下,我们选用HDFS;在追求低延迟,有随机读写需求的场景下,我们选用HBase。那么是否存在一种系统,能结合两个系统的优点,同时支持高吞吐率和低延迟呢?Kudu的出现正式为了解决这以难题。 需要注意的是,HBase并不支持SQL语句,HBase需要借助于Apache Phoenix,它是一种SQL ON HBase的实现方案,它基于HBase构建了一个分布式关系型数据库,能够将SQL转换成一系列HBase scan操作,并以JDBC结果集的方式将结果返回给用户。 博主推荐阅读: http://hbase.apache.org/ https://www.cnblogs.com/yinzhengjie/p/10872926.html https://www.cnblogs.com/yinzhengjie/p/10915819.html https://www.cnblogs.com/yinzhengjie/p/10878681.html
6>.其他不常用的非关系型数据库
MemcacheDB,Berkeley DB,Tokyo Cabinet\Tokyo Tyrant(ttserver)等。这些非关系型数据库逐步的淡出了普遍运维的视线,特别是互联网公司几乎见不到,因此我们这里就不多介绍了。
六.实体-联系模型E-R
实体Entity:
客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实体,把实体名写在框内。换句话说,实体就是显示世界中具有相同属性的一组对象,可以是物理存在或抽象的事物。
属性:
实体所具有的特征或性质。
联系Relationship:
联系是数据之间的关联集合,是客观存在的应用语义链。换句话说,联系是实体之间的关联集合。
实体内部的联系:
指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系
实体之间的联系:
指不同实体之间联系。例:学生选课实体和学生基本信息实体之间,实体之间的联系用菱形框表示。
七.联系类型
联系的类型 一对一联系(1:1) 案例:假设有实体管理者,一个管理者管理一个部门,一个部门只有一个管理者。 解决方案:字段建在哪张表 都行 一对多联系(1:n) 案例:一个员工属于一个部门,一个部门有多个员工。 解决方案:员工外键;部门主键 多对多联系(m:n) 案例:一个员工属于多个部门,一个部门有多个员工。 解决方案:建立第三表 数据的操作: 数据提取:在数据集合中提取感兴趣的内容。SELECT 数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE 数据的约束条件 : 是一组完整性规则的集合 实体(行)完整性 Entity integrity 域(列)完整性 Domain Integrity 参考完整性 Referential Integrity
八.简易数据规划流程
第一阶段:收集数据,得到字段
收集必要且完整的数据项
转换成数据表的字段
第二阶段:把字段分类,归入表,建立表的关联
关联:表和表间的关系
分割数据表并建立关联的优点
节省空间
减少输入错误
方便数据修改
第三阶段:
规范化数据库
九.数据库的正规化分析
数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最早提出这一概念,并于1970年代初定义了第一范式、第二范式和第三范式的概念
RDMBS设计范式基础概念
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小
目前关系数据库有六种范式:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
巴德斯科范式(BCNF)
第四范式(4NF)
第五范式(5NF,又称完美范式)
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般数据库只需满足第三范式(3NF)即可。
十.RDMBS三种设计范式概述
1NF:
无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
2NF:
属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性
3NF:
属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
十一.SQL概念
SQL: Structure Query Language 结构化查询语言 SQL解释器: 数据存储协议:应用层协议,C/S
S:
server, 监听于套接字,接收并处理客户端的应用请求
C:
Client 客户端程序接口 CLI(命令行客户端) GUI(图形化客户端) 应用编程接口 ODBC:Open Database Connectivity JDBC:Java Data Base Connectivity
十二.数据库常见术语基本概念
候选键
关系中,能唯一标识一条元组的属性或属性集合,称为候选键。 候选键,表中一列或者多列组成唯一的key,通过这一个或者多个列能唯一的标识一条记录。 表中可能有多个候选键。
主键(PRIMARY KEY):
主键的列不能包含空值null。主键往往设置为整型、长整型,可以为自增AUTO_INCREMENT字段。 表中可以没有主键,但是,一般表设计中,往往都会有主键,以避免记录重复。 InnoDB的表要求使用主键。
一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个
惟一键(UNIQUE):
一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
外键(FOREIGN KEY):
一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据。
严格来说,当一个关系中的某个属性或属性集合与另一个关系(也可以是自身)的候选键匹配时,就称作这个属性或属性集合是外键。
检查:
字段值在一定范围内
索引:
将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储
关系运算:
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
十三.约束(constraint)
表中的数据要遵守的限制,为了保证数据的完整正确,数据模型还必须支持完整性约束。常见的约束如下:
"必须有值"约束
某些列的值必须有值,不许为空NULL。
域约束"Domain Constraint"
限定了表中字段的取值范围
实体完整性Entity Integrity
PRIMARY KEY约束定义了主键,就定义了主键约束。主键不重复且唯一,不能为空。
引用完整性Referential Integrity
外键定义中,可以不是引用另一张表的主键,但是,往往实际只会关注引用主键。 外键:在表B中的列,引用了表A中的主键,表B中的列就是外键。 A表称为主表,B表称为从表。
插入规则:不需要指定。 如果在表B插入一条记录,B的外键列插入了一个值,这个值必须是表A中存在的主键值。
更新规则:定义外键约束时指定该规则。
删除规则:定义外键约束时指定该规则。
外键约束的操作:
外键约束,是为了保证数据完整性、一致性,杜绝数冗余、数据错误。
CASCADE(级联):
从父表删除或更新会自动删除或更新子表中匹配的行
SET NULL:
从父表删除或更新行,会设置子表中的外键列为NULL,但必须保证子表列没有指定 NOT NULL,也就是说子表的字段可以为NULL才行
RESTRICT:
如果从父表删除主键,如果子表引用了,则拒绝对父表的删除或更新操作
NO ACTION:
标准SQL的关键字,在MySQL中与RESTRICT相同。拒绝对父表的删除或更新操作
十四.数据模型
数据抽象:
物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
视图层:用户角度,描述DB中的部分数据
关系模型的分类:
关系模型
基于对象的关系模型
半结构化的关系模型:XML数据
十五.数据仓库和数据库的区别
本质上来说没有区别,都是存放数据的地方。
但是数据库关注数据的持久化、数据的关系,为业务系统提供支持,事务支持;
数据仓库存储数据的是为了分析或者发掘而设计的表结构,可以存储海量数据。
数据库存储在线交易数据OLTP(联机事务处理OLTP,On-line Transaction Processing);数据仓库存 储历史数据用于分析OLAP(联机分析处理OLAP,On-Line Analytical Processing)。
数据库支持在线业务,需要频繁增删改查;数据仓库一般囤积历史数据支持用于分析的SQL,一般不建 议删改。
十六.去IOE
它是阿里巴巴造出的概念。其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、 EMC存储设备,取而代之使用自己在开源软件基础上开发的系统。传统上,一个高端大气的数据中心, IBM小型机、Oracle数据库、EMC存储设备,可以说缺一不可。而使用这些架构的企业,不但采购、维 护成本极高,核心架构还掌握在他人手中。
2008年阿里提出去IOE时不少人觉得是痴人说梦,但经过多年运营阿里云已经彻底完成了去IOE工作,即阿里云的硬件投入彻底抛弃了这三家传统企业,经历几次双十一的挑战之后该技术也趋于成熟,有媒体猜测这或许是12306选择阿里云的重要原因。
2008年阿里的彭蕾找到了王坚,王坚博士于2008年9月加入阿里巴巴集团担任首席架构师一职,加入阿里巴巴之前任微软亚洲研究院常务副院长。云计算就是王坚研究方向。2006年前后亚马逊,Google,微软,IBM等互联网巨头公司相继推出自己的云产品,王坚认为这个就是趋势,如果将来中国的信息计算必须通过外国的系统那不堪设想,于外企这是一张未来的船票,与国家这可能是一艘船本身,2009年王坚领衔阿里云项目,取名“飞天计划”。马云当初放出豪言先砸10个亿,不够再砸10个亿。砸到做出来为止。群情振奋之后,现实的耳光立即打来,在外,2010年,"中国IT领袖峰会",李彦宏说云计算这个东西就是新瓶装旧瓶没什么新东西。马化腾说云计算是一个超前的概念,到阿凡达那个时代可以会实现。在内,阿里从高管到员工都开启了嘲讽模式,有人说王坚是高心理学的,肯定死王坚拍了马总的马屁,有人说咱们放着IBM那么成熟的服务器不用,非要自己搞这不浪费么。矛盾在2012年爆发了,阿里内网上大家集体对王坚开喷,马云再次发文压制,但毕竟骂王坚的人太多了,马云对王坚说,你也可以骂,但请你骂得的时候别拍桌子,问题不断,系统不稳,谩骂不停,就这样团队硬抗到了2012年下半年的测试阶段。在最后的电路拉闸测试的时候,同事不敢拉电,连问三次最后闭上眼睛拉下电闸,重启之后,数据恢复,测试成功。团队成员们忍不住放声大哭,王坚却默默地独自一人走出办公室。阿里云挺过了自己的双十一,又挺过了春晚,挺过了12306,在年会上,王坚忍不住落泪,他说我这两年挨的骂比我一辈子都多。之后的故事,在平淡无聊中开启了中国云计算元年,2013年大小云服务企业迅速跟进,此后,中国企业能用上自主研发的云计算了。至今,40%的中国500强企业,近一半的中国上市公司成为阿里云的客户。有人说王坚骗了马云10个亿,但还给阿里50000亿。马云不懂技术,但却在很多懂技术的大佬中做出了正确的选择,或许因为马云自己曾经也被叫做骗子吧。
有人抢占道德制高点,告诉你可以不劳而获。有人蛊惑大众小白,可以坐享其成。有人怂恿佛系,让你坦然接受一生。强辩当然一时爽快,但把时间用在耕耘更加可贵。王坚说,阿里云是我们拿命做出来的,在此之前中国人从来没有做过,有人那生命骂你,但你得把生命用在该用的地方,幸好有一个王坚,但是他晚几年成功呢?或者真的失败了呢?咱们能明辨然后包容吗?不敢想,从今日看往昔当然满屏彩虹屁,从今日看明天,只因实干真朝夕,开创注定孤独,对于咱们这些思考者请在思考之后相信相信的力量。不然,中国企业用的可能还是外国的云呢。
对于阿里巴巴这样大规模的互联网应用,应该采用开源、开放的系统架构。这种思路并不是阿里巴巴的新发明,国外的谷歌、Facebook、亚马逊等早已为之。只不过它们几乎一开始就有没有采用IT商业公司 的架构,所以他们也不用“去IOE”。
去IOE,转而使用廉价的架构,稳定性一定下降,需要较高的运维水平解决。
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。
欢迎交流学习技术交流,个人微信: "JasonYin2020"(添加时请备注来源及意图备注)
作者: 尹正杰, 博客: https://www.cnblogs.com/yinzhengjie/p/11730035.html