数据库基础概念理解

作为服务器开发者,数据库管理是后端服务关键的一部分、同时也是最容易被忽视的一部分;
工作好些年、发现很多开发者对数据库拿来就用、对数据库的思考少之又少、或是永远千篇一律、总到了项目快速增长期才花大量的成本去做最基础的修改,而现实往往是残酷的、是改不动的,甚至是需要修改项目源码进行配合重构的…
为了减少这样的情况发生,本文希望对刚接触数据库、或准备接触数据库的开发者对数据库有一个全新的、基础性的认知。

一. 数据库是怎么来的?

数据库的概念其实不难理解,你可以试想:如果有人告诉你一串信息,你为了不轻易忘记,最简单地,你可以新建一个txt文件,然后把信息完好的存起来,等下次谁要了解的时候,再去打开文本进行查看;其实这样的一个行为就是简单的数据操作,我们把这样有着一定规律和特征的数据集中存储起来,就构成了我们需要的数据库(可以是txt、excel、mysql、sqlserver等等);

二. 为什么需要专业的数据库软件?

那么可能就人会问,既然这么简单,为什么还需要专门的数据库软件呢?

  1. 更好地分类
    数据库软件通过分库、分表、建立字段,将存在着一定规则的数据进行分类存储,并对字段进行描述、以便对数据进行合理地空间分配、同时进行一定地约束;(你可以理解为你有一个图书馆、为了方便管理,你放置了多排书架、每一个书架都有一定的规则,比如1、2、3排放历史,4、5放人文,6、7放科学)

MySQL

  1. 简洁高效的数据库指令
    有了物理存储之后,紧接着面对的难题就是:如何操作数据?
    最基本的操作数据有四种,就是俗称的CURD【代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作】
    1)创建 Create:存入一本书(INSERT)
    2)更新 Update:替换一本书(UPDATE)
    3)读取 Retrieve:查找一本书(SELECT)
    4)删除 Delete:拿走/销毁一本书(DELETE)

MySQL

在这种约定下,当我们向数据库发送CURD指令时,它相当于帮我们封装好一行命令,然后对我们的存储介质进行数据操作;比如SELECT:
(举例)CAT mydatabase | grep on

SELECT * FROM mydatabase WHERE fields = 'on';

数据库入门级概念理解

  1. 更高效的查询
    在这里就要引入索引的概念了,因为索引用得好事半功倍;用得不好,简直是灾难性的负担;因为索引可以提高查询效率,但同时它的维护是需要代价的;

当我们的图书馆运行一段时间后,发现书本上架并不难,难的是如何在海量的书架里,快速地找出一本书,这个时候有个简单的做法,就是给每一列书架标记一个记号,比如根据开头字母(a/b/c..),我们在计算机里称之为索引。

索引(index)是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

数据库入门级概念理解

有了这样的规则,假设当有人来找《埃及1840》这本历史书,我们可以快速锁定到历史书籍中的1列1、2行,而其余的书架子我们都可以不用全部翻查,这就是索引的最基本实现;

学习到后面,你会发现索引其实十分有趣!
不同的数据库引擎所支持的索引结构是不一样的,常见的索引数据结构有(B+TREE、HASH、红黑树等等),他们的目的基本是在“维护”和“查找”尽可能地实现高效,具体选择哪种需要开发者对他们有一定的了解,而不是永远地盲目使用一种索引类型;

索引除了进一步的分类,他还被有组织有规律地加入到一种数据结构中(比如BTREE——限制了每个节点最多只有两个叶子节点、右边节点比左边“大”等等,通过不同的数据结构算法来提高查询的效率,以达到节省计算机查询数据的内存以及时间上开销)

当然建立索引是需要代价的,除了额外建立的.MYI索引文件需要暂用的磁盘空间,在我们每一次地新增、修改、删除,索引文件都是需要同步发生变化的,这一点有这个意识就可以了,后续在专门写索引的文章里,我们再细究,这里只是为了让开发者都有一个基础的认知。

数据库入门级概念理解

三、打开数据库的探索之门

通过了解数据库的存储介质、操作方式、以及查询优化的原理,我们明白数据库的操作是即简单又十分不易的;

试想如果没有这些数据库软件、需要我们自己去实现一个数据库的服务、自己去存储数据、操作数据、查询数据、构建索引、事务、优化引擎等等,你还舍得这样漫不经心地设计你的库表吗?

所以希望各位数据库开发者,都能且用且珍惜,不要轻视数据库的操作,不要随意操作一些自己都不知道会发生什么后果的行为,可能你无意地一个设计,已经带来了不断地、无意义的服务器压力,轻者浪费资源,重者只能带来无止境地优化~

如有不对的地方欢迎指正、有存疑的地方欢迎来找我探讨,谢谢~

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!