数据库的本质、概念及其应用实践(一)

原文请详见:http://www.ucai.cn/blogdetail/7033?mid=1&f=5

能够在线执行查看效果哦!

今天这堂课,分为三个大点,正如标题所指出的,是讨论数据的本质、概念与应用实践。第一点本质的探讨是站在一个更高的高度来分析数据的产生以及各种使用场景,然后将数据相关的存储手段,作一个汇总解说。而概念,则是一个串讲,主要放在关系数据库上,由于我们六月份公开课,也将以关系型数据库为主。第三点就是通过一些实例来巩固前面两点所讲的内容。

一、数据库的出现源起和本质

1.1 数据库的起源

想像一下我们的电脑,有文件夹,有文件,文件有大小,有位置,有格式,这个是有文件系统開始就有这个概念的,肯定在有一个地方,存储了这些文件的參数或者元数据,而在我们的日常生活中,每个物体和人,都有其各自不同的特征,当一批量的这些可描写叙述的人的特征,想要数据化存储起来的时候,也就须要有一种格式来保存。除了保存数据之外,我们还得对数据进行管理。这就是数据库出现的背景,而且随着使用场景的越加复杂,数据库本身也有了很多其它的衍生版本号。

所以数据库起源于对数据的存储以及管理。

1.2数据库的使用场景

那么我们有几个问题,基于大家眼下的理解,第一个问题是有哪些须要保存的数据种类,有哪些存储方式呢?我们发散一点来想。

能够得到例如以下的情况:

A、在程序中自己定义,比方数组,仅仅保存在内存里,等程序停止了之后,数据就没有了。这样能够不能够?

在这个里面存储的反正是描写叙述型数据,也能够是二进制数组。

B、保存在一个文本文件中能够不能够,有自己的格式,比方自己定义的格式,比方XML,比方JSON格式

这里保存的,仅仅能是描写叙述型数据。

C、採用一些文件型数据库,比方支持SQL訪问的文本数据库,比方Sqlite、比方Access

除了特定的数据类型,一般也仅仅保存文本描写叙述数据。

D、採用 MySQL 这样基于网络和可分布式的数据库系统。

用来保存较多数据量的用户数据、关系数据、交易数据,这些数据要实再高速查询更新。

E、当数据量大时,一台设备就不能满足要求,这就须要用到分布式数据库,可能是数据集群。

F、採用 memcached 这种软件保存着缓存的数据。

一般用于保存文本数据或者计数。

G、採用 fastdfs 这种分布式文件系统来保存着文件数据。

不用于保存除文件本身描写叙述之外的其它描写叙述数据,用于保存大量的文件。

H、採用redis 这种KVDB 软件来保存简单关系的描写叙述数据,或者特定的结构。

比方用于保存微博数据,用KEY能够迅速定位到微博内容。

I、同KVDB类似的,大家有听过队列那几讲的同学吗?是不是也是特殊的数据存储手段呢?一边有人生产数据,一边有人消费数据。

J、用于保存地理关系数据,并提供运算。在英文里叫SpatialData,也就是空间数据。Oracle最擅长,如今MySQL也有空间扩展。

http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

K、而对于大量的,源源不断的海量数据,相对不那么规则的数据存储,我们可能存储在Hadoop系统中。

L、最后再谈一个场景,像百度这种搜索引擎,他会把他的数据全放在MySQL里,然后去检索吗?显然不是。有自有的索引格式和支持分布式查询的系统。

1.3数据库场景以及分类总结

总结一下:

A、在电脑时代曾经,人类就产生了大量的信息,而电脑时代以来,更是产生了大量的数字化的数据。而这些数据库的保存的形式,从上面能够看到,根据不同的场景,不同的保存方式,是多种多样的。有仅在内存中保存,有在文件里保存,有专用严谨的数据库系统保存,也有不那么严谨的KVDB保存。

B、依据上面的各种存储场景,我们对数据,也做两个简单的分类,一个是结构化数据库和非结构化数据的分类,当然,还有再加一种半结构化数据的。所谓结构化,就是非常规整地有属性的一种情况。像一个人,他有身高、体重、年龄,这个描写叙述是结构化的,你给照一张照片,录一段声音,拍一段摄像,虽然这也是数据,可是不是结构化的。对于不同的这两类数据,存储方式也不同样,比方结构化数据是典型的二维表的结构。而非结构化数据就是仅仅以原始数据的形式存储。

上面的场景,大多是结构化数据的处理场景,像文本数据库、MySQL数据库。而在fastdfs上,Hadoop上,就有大量的非结构化数据的存储。

C、依据数据量本身的大小,我们也能够做一个分类。或者特定的技术应用场景。

比方小数据量数据,我们可能为了方便,就以文本的方式来保存。而对于一个正规的提供服务的站点,像用户数据,比方优才网的用户数据,就会用MySQL数据库来保存,为了訪问速度,也会用到memcached这种缓存软件。也会用fastdfs来保存小文件。而当有大量的日志等数据量产生,须要进行数据分析的时候,比方每天的数据量以几百G,T来计的时候,就会用Hadoop 这种软件。

所以,不同的数据量也使用不同的保存方式。小型数据、大中型数据、海量数据或者大数据。

D、第四个角度就是从上面能够看出,数据的存储方式,有非常多类别,不同类别适用于不同的场景。数据库是非常强大的,可是不是全部的场景都合适使用数据库。比方上面讲的全文检索的场景,一般须要用特定的存储,特定的索引方式。假设详细地讲,全文检索中,使用的一种索引,叫倒排索引。

二、数据库有哪些概念

好的,聊完了数据以及相关软件的一些使用场景,对于不同场景下使用不同软件有了概念。以下我们来介绍一下,在数据库的领域经常使用的一些术语,这些术语,在我们的整个数据库学习中都要用到。

因为公开课的时间问题,我们主要交流一下基本概念,对于高级的概念,后面的公开课会持续地讲到。

2.1 数据库的基本概念

介绍我们以下数据库的这些概念时,我们以一个公司做为对照。

2.1.1、库

库,就相对于一个公司,以下差点儿全部的概念都装在这个公司里的。

在使用数据库之前,我们得在数据库软件上创建数据库。

在 MySQL 里,同一个连接,仅仅能附着在同一个库上,当然,仅仅要权限同意,也能够实现跨库查询。

创建数据库的语法是

createdatabase xxx;

仅仅有root 用户能创建库。

2.1.2、表

表就相对于,公司的一个部门,这个部门管用户,那个部门管订单。就是一个又一个的表。

表由记录和字段组成。

字段表成的是表定义。

记录组成的是表数据。

CREATE TABLE `hstesttbl` (
  `k` int(11)NOT NULL AUTO_INCREMENT,
  `v`char(255) NOT NULL DEFAULT '',
  PRIMARY KEY(`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

字段定义则有字段名,字段类型,是否为空,是否自增长,缺省值等。

记录则是实际的数据值,同一个表的记录的定义都是一样的。也就是说有同样的特征。

2.1.3、视图

视图类就相当于虚拟的项目小组,能够是同一个部门出来的,也能够是跨部门的。

视图之所以说是虚拟,由于没有实际存在的数据。不管是定义,还是数据,都是从别的表里组合起来的。

create view hsview as select * from hstesttbl;

mysql> show tables;
+--------------------+
| Tables_in_hstestdb |
+--------------------+
| hstesttbl         |
| hsview            |
+--------------------+
2 rows in set (0.02 sec)

mysql> show create table hsview\G;
*************************** 1. row***************************
               View: hsview
        Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQLSECURITY DEFINER VIEW `hsview` AS select `hstesttbl`.`k` AS `k`,`hstesttbl`.`v`AS `v` from `hstesttbl`

从上面的命令能够看出,视图跟表的操作有非常多相似。而且从表到视图还能改动字段名。

2.1.4、索引

索引就是相当于部门每一个员工的一些用于高速找到员工的属性。比方职位,比方爱好,比方毕业学校。通过这些,就能将部门的人分类,每一次查询都能缩小结果集。

对表创建索引是,比方还是上面这个表, alter table hstesttbl add index(xxx);

2.1.5、键

键就相当于部门每一个人的一些最快捷且唯一的联络方式,比方电话、邮箱,微信号,QQ号都是。

加入键跟加入索引,类似,删除键这里介绍一下,

比方:

alter table hstesttbl drop primary key;

2.1.6、权限

是指公司内部限制的一些纪律,比方公司外部人,是不能知道公司内部的一些事情的。

我们能够通过

grantALL PRIVILEGES on dbname.* to ‘user‘@‘127.0.0.1‘ identified by ‘password‘ withgrant option;

这种语句给某用户授权,全权訪问某个库。这个这个用户仅仅能訪问这个库,在没有获得很多其它授权的情况下。

上面说仅仅有root用户能创建数据库,而对于上面的其它操作,比方创建表,加入视图,新建、删除索引和键,仅仅要经过了上面的授权,就能够做了。

2.1.7、SQL

SQL就相当于公司的一些规定,指令。比方我们在公司里交流说,能够公布到生产环境了。听起来一句简单的话,包括着可能进行了产品确认,各种測试,能够由运维上线了。

SQL是我们同数据库打交道的指令。上面事实上在讲各个概念时,已经都讲过了一些SQL命令,我想这里提几个点。

手写命令,很重要,优才网要求自己的学员都要有手写命令的能力,不能离开phpmyadmin就没有办法干活。

SQL上面虽然介绍了这么多,我们对它进行一个分类,事实上这个分类早有人做了。主要是为DDL、DML、DCL(当然另一个TCL,我们今天不讲)。

(1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。上面的,大多是DDL。

(2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和改动三种操作。这就是我们寻常所熟知的增删改查操作。

(3)数据控制(DCL)。包含对基本表和视图的授权,完整性规则的描写叙述,事务控制等内容。这个就是我们上面也有涉及,权限处理。

2.2 学术性的概念

?1、范式与冗余

–第一范式,列不能够切割,比方兴趣字段,它里面,可能写了篮球、电影等多项。原则上来讲,这个表是不满足第一范式的。应该专门建立一个用户兴趣表,有uid和兴趣。然后一个人有多条记录。所以在数据库字段定义时,须要显式地指明数据类型,除了文本类型之外,你非常难往一个字段里附加多个信息。

–第二范式,主键决定了其它所有属性,比方一个班级学生表,一个学号,决定了学生其它的信息,比方有一个表,里面有学号、学院编号、学生姓名、年龄、学院、院长。学号和学院编号是主键,看起来没有错,学生在这个学院编号里,决定了哪个学院,院长是谁谁谁。只是这是不满足第二范式的,由于学院和院长不是由学号这个主键来决定的,而是由学院编号来决定的。所以要分拆。

–和三范式,其它属性全由主键决定, 比方还是上面这个表,里面有学号、学院编号、学生姓名、年龄、学院、院长。学号是主键,看起来没有错,学生在这个学院里,院长是谁谁谁。只是这是不满足第二范式的,由于院长不是由学号这个主键来决定的,而是由学院来决定的。所以要分拆。

?2、ACID:

–原子性  (Atomicity) , 不可中间失败。比方说,我们买东西,一边是买家付款,从买家账户扣除,还有一边是存钱入卖家账户,这分了两步,这不是原子的。由于可能中间失败。比方扣钱成功,存钱未成功。

–一致性(Consistency),还是上面这个样例,交易完毕后,数据一致,收支相抵。不能一边多,一边少。

–隔离性(Isolation),避免并发混乱,非常多数据,一个客户訪问时没有问题,多个用户在高并发时訪问,也要满足数据不会错乱。

–持久性(Durability),永久保存,就是不要丢失。不能一关机没有了,即使丢一条也不成。

2.3 很多其它高级术语

1、存储引擎 、事务、复合索引、连接池、备份、恢复

2、主从复制、行锁定、表锁定、慢查询、二进制日志、暂时表、内容分发、同步、数据库分区、分库、分表、水平拆分、垂直拆分

这很多其它的高级术语,我们在后面再交流,或者在全栈project师课程中再交流。

时间: 2024-10-08 08:41:13

数据库的本质、概念及其应用实践(一)的相关文章

数据库的本质、概念及其应用实践

今天这堂课,分为三个大点,正如标题所指出的,是讨论数据的本质.概念与应用实践.第一点本质的探讨是站在一个更高的高度来分析数据的产生以及各种使用场景,然后将数据相关的存储手段,作一个汇总讲解.而概念,则是一个串讲,主要放在关系数据库上,因为我们六月份公开课,也将以关系型数据库为主.第三点就是通过一些实例来巩固前面两点所讲的内容. 一.数据库的出现源起和本质 1.1 数据库的起源 想像一下我们的电脑,有目录,有文件,文件有大小,有位置,有格式,这个是有文件系统开始就有这个概念的,肯定在有一个地方,存

数据库事务的概念及其实现原理

目录 前言 1. 认识事务 1.1 为什么需要数据库事务 1.2 什么是数据库事务 1.3 事务如何解决问题 1.4 事务的ACID特性以及实现原理概述 2.并发异常与并发控制技术 2.1 常见的并发异常 2.2 事务的隔离级别 2.3 事务隔离性的实现--常见的并发控制技术 3. 故障与故障恢复技术 3.1 为什么需要故障恢复技术 3.2 事务的执行过程以及可能产生的问题 3.3 日志的种类和格式 3.4 日志恢复的核心思想 3.5 事务故障中止/正常回滚的恢复流程 3.6 系统崩溃时的恢复过

Android数据库之基本概念(上)

1.Android数据库简介 Android通过结合使用SQLite数据库和Content Provider,提供了结构化数据的持久功能. SQLite数据库可以通过一种结构化的.易于管理的方法来存储应用程序数据.Android提供了一个完整的SQLite关系数据库的库文件.每个应用程序都可以创建自己的数据库,并对这个数据库拥有完全的控制权. Android数据库存储在设备上的/data/data/<package name>/database文件夹中,所有的数据库都是私有的,只能被创建他们的

attilax.java 注解的本质and 使用最佳实践(3)O7

attilax.java 注解的本质and 使用最佳实践(3)O7 1. 定义pojo 1 2. 建立注解By eclipse tps 1 3. 注解参数的可支持数据类型: 2 4. 注解处理器 2 5. 读取注解 2 6. 不能读取到注解,为null的解决 3 7. 参考: 3 1. 定义pojo public class pojo { @Validate("required") String name; int id; @Validate("required")

MySQL——数据库和 SQL 概念&amp;&amp;MySQL的安装

数据库和 SQL 概念 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它的产生距今已有六十多年.随着信息技术和市场的发展,数据库变得无处不在:它在电子商务.银行系统等众多领域都被广泛使用,且成为其系统的重要组成部分. 数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增.删.改.查等操作. 结构化查询语言(Structured Query Language)简称 SQL,是上世纪 70 年代由 IBM 公司开发,用于对数据库

数据库的本质、概念及其应用实践(二)

原文请详见:http://www.ucai.cn/blogdetail/7034?mid=1 能够在线执行查看效果哦! 三.各种数据库的关系.实践 3.1.自制简单文本格式(甚至在PHP中,用数据保存配置) A.比方有一个AngularJS的演示样例项目,就用json保存演示样例数据的格式. B.PHP保存配置数据就更加常见了.TP就是一个典型. 3.2.文本数据库(php text db api) 我们从 http://www.c-worker.ch/txtdbapi/index.php#do

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

数据库系列学习(一)-数据库几个概念

1.什么是数据库 数据库就是数据的仓库,对这个大仓库.当我们需要对数据进行操作的时候,只要告诉它"做什么"就可以了. 2.几个概念 Catalog [理解:不同的仓库放不同的数据,便于管理] [如:淘宝是把图片专门放到一个数据库,将用户信息在专门放到另一个数据] 表:Table [理解:将仓库划分为不同的区域,每块区域放一件"产品"] [如:用户信息中可能有,管理员,有淘宝员工,有普通用户] 列:Column [理解:同样的"产品",有不同的特征

Oracle数据库的基本概念(转)

一.数据库 我们在安装Oracle数据库时,全局数据库名:就是一个数据库的标识,在安装时就要想好,以后一般不修改,修改起来也麻烦,因为数据库一旦安装,数据库名就写进了控制文件,数据库表,很多地方都会用到这个数据库名. 启动数据库:也叫全局数据库,是数据库系统的入口,它会内置一些高级权限的用户如SYS,SYSTEM等.我们用这些高级权限账号登陆就可以在数据库实例中创建表空间,用户,表了. 二.数据库实例 用Oracle官方描述:实例是访问Oracle数据库所需的一部分计算机内存和辅助处理后台进程,