数据库来源于英文单词database,database可以拆分为data 与base,翻译成中文就是数据的根源,数据的基础。数据库是存储在计算机系统内的,结构化的、共享的、可控制的数据集合。数据库就是存储数据的仓库,这个仓库里的数据必须按一定的格式存放,以便于查找数据。可以这样理解:将数据按照一定的规则,结构化地储存在一个相当于磁盘的地方,这个地方就是数据库。
数据库三个基本特点
-
永久存储
-
有组织
-
可共享
数据库管理系统由数据库及其管理软件组成,是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS(Database management system)。
数据库管理系统主要功能:
-
数据定义功能DDL ,我们可以用它来定义数据库中的数据对象的组成与结构
-
数据组织、存储和管理 ,提供多种存储方法来提高存储空间利用率和方便存取
-
数据操纵功能DML ,我们通过它来对数据库进行增删改查
-
数据库的事务管理和运行管理 ,对数据库的建立、运用和维护进行统一管理和控制,保证数据安全和完整
-
数据库的建立和维护功能,包括又不限于初始数据输入,性能监控与分析
2、数据管理发展历程
人工管理阶段
计算机发展初期,内存空间小,计算速度低,外存只有磁带、卡片和纸带,没有像磁盘这样快速的直接存取存储设备,数据处理是以批处理方式进行的,程序,数据不分离。
文件系统阶段
20世纪50年代后期到60年代中期,该时期计算机硬件有了进一步的发展,出现了磁盘、磁鼓等能直接存取的外存储设备。软件方面,高级语言和操作系统已经有了完善的产品,并且操作系统中有专门负责管理数据的文件系统功能。数据处理的方式有批处理,也有联机实时处理。
[root@r88-84 opt]# sqlite3 sqlit_test.db #新建一个sqlit_test.db数据库 SQLite version 3.26.0 2018-12-01 12:34:55 Enter ".help" for usage hints. #创建一个测试表 sqlite> create table testtable( id int primary key ,name vchar(50)); #向测试表插入数据 sqlite> insert into testtable(id,name) values(1,'wo'); sqlite> select * from testtable; 1|wo #退出sqlite库 .quit #编写python测试程序 [root@r88-84 opt]# more pythyon_sqlite.py import sqlite3 conn=sqlite3.connect("sqlite_test.db") print("数据库连接成功!") print("") conn.execute("INSERT INTO testtable (id,name) VALUES (2,'ni')"); conn.commit() print ("记录插入成功!") print("") print("查询testtable表所有记录") cursor = conn.execute("SELECT * from testtable") print("ID\tNAME") for row in cursor: print("{}\t{}".format(row[0],row[1])) cursor.close() print("") print("删除testtable表中id为2的记录") conn.execute("delete from testtable where id=2") conn.commit() print("") conn.close() print("成功关闭数据库")
数据库系统阶段
数据库系统阶段是指从20世纪60年代后期至今。起始的标志性事件有:
-
1968年美国IBM公司推出IMS(Information Management System)系统,该系统具有层次结构
-
1969年美国CODASYL(Conference On Data System Language)组织提出网状模型
-
1970年美国IBM公司的E.F.Codd连续发表论文,提出关系模型,奠定了关系数据库的理论基础
3、常见的数据库系统
https://db-engines.com/en/ranking
关系型数据库
Oracle
1977年6月,由拉里·埃里森(Larry Ellison)与鲍勃·迈纳(Bob Miner)和埃德·奥茨(Ed Oates)三位巨人开始共同筹划构建可商用的关系型数据库管理系统(RDBMS),并把这种商用数据库产品命名为 Oracle,主要用于大型企业级应用。
2007年,发布了oracle11g
2013年,发布了Oracle 12c,目前,还是12C阶段,只是小版本更新。
Mysql
由瑞典MySQL AB 公司1995年发布,后在2008年2月被SUN公司收购,最终SUN公司又被甲骨文公司收购,目前属于 Oracle 旗下产品。 MySQL开源,加上其体积小,速度快,在Web应用方面很广泛, 是最流行的关系型数据库管理系统之一。MySQL 软件采用了双授权政策,分为社区版和商业版一般中小型和大型网站的开发都选择 MySQL社区版 作为网站数据库。
Microsoft SQL Server
1987年,Sybase发布了Unix下跑的Sql Server。
1988年微软联合了 Sybase 和 Ashton-Tate 把Sql Server迁移到 OS/2 操作系统。
1990年微软发布的新产品只有微软的品牌,即 Microsoft SQL Server 1.1。同一年,微软为 SQL Server 建立专门的技术团队,并且于次年起陆续取得了 Sybase 的授权。
1994年,微软与 Sybase 正式终止了合作关系,微软买下了 Windows NT 版本的 SQL Server 全部版权后就开始完全独立开发。
1996年,微软发布了 SQL Server 6.5,这是个经典版本。
Sql Server 2014是微软的重要版本,这个版本性能大大提升。
Sql Server 2017是微软的重要版本,这个版本支持在Liinux上安装。
PostgreSQL
PostgreSQL是以加州大学伯克利分校计算机系开发的 Posrgres,后更名为PostgreSQL,支持在windows和linux下运行,它是免费的,以 BSD-风格许可证下发行。
键值数据库
Redis
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言如Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang的API。
redis的官网地址,非常好记,是redis.io。
Memcached
memcache是一套分布式的高速缓存系统,这是一套开放源代码软件,以BSD license授权发布。
etcd
etcd 是一款分布式存储中间件,使用 Go 语言编写。作为一款分布式、可靠的键值存储组件,etcd 常用于微服务架构中的服务注册与发现中心,相较于 ZooKeeper 部署更简单,而且具有数据持久化、支持 SSL 客户端安全认证的独特优势。
文档数据库
时序数据库
InfluxDB
InfluxDB是一个开源的、高性能的时序型数据库。
度量的数据集(measurement),类似于关系型数据库中的 table; 一个数据点(point),类似于关系型数据库中的 row; 时间戳(timestamp),表征采集到数据的时间点; 维度列(tag),代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用; 指标列(field),代表数据的测量值,随时间平滑波动。
Elasticsearch
Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。