数据库
1.数据库案例:
目的:
数据持久化:
1.校验数据的合法性
2.修改内存,利用高效的数据结构将数据储存起来
3.将数据写入存储介质(高性能,高稳定性,硬件寿命高)
潜在的问题:
- 数据能维持多少时间?
- 怎么处理多人同时修改数据?
- 除了数据库还能存到别的存储系统吗?
- 只能处理结构化数据吗?
- 别整那些没用的,怎么拿代码上手?
2.存储技术与数据库简介:
2.1存储系统:
能读,能写,能安全有效的把数据持久化的软件。
关注点:用户 介质 内存 网络
系统特点:
作为后端软件的底座,性能敏感
代码既“简单”(为了高性能)又“复杂”(考虑到多种可能发生错误的情况)
软件架构容易受硬件影响
缓存:很重要,贯穿整个存储体系
拷贝:很昂贵(对cpu和内存消耗很大),应该尽量减少
硬件方面应该有一个统一的接口。
存储技术——RAID技术
整个问题来源于一个问题:性价比: 不想花钱还想要高性能高稳定性
answer:R(edundant) A(rry) of I(nexpensive) D(isks)
2.2数据库
难道存储系统和数据库不一样吗?、
关系(Relation)是什么?描述两个实体键的练习。
关系代数:对关系做运算的抽象查询语言
SQL:一种DSL(domain-specific language ),方便人类阅读的关系代数的表达形式
*热知识: *领域特定语言domain-specific language (DSL)是一种旨在特定领域下的上下文的语言。与之相比的另一个概念是 通用语言general-purpose language(GPL),通用语言则可以广泛应用于各种商业或应用问题当中。
DSL 并不具备很强的普适性,它是仅为某个适用的领域而设计的,但它也足以用于表示这个领域中的问题以及构建对应的解决方案。HTML 是 DSL 的一个典型,它是在 Web 应用上使用的语言,尽管 HTML 无法进行数字运算,但也不影响它在这方面的广泛应用。
而 GPL 则没有特定针对的领域,这种语言的设计者不可能知道这种语言会在什么领域被使用,更不清楚用户打算解决的问题是什么,因此 GPL 会被设计成可用于解决任何一种问题、适合任何一种业务、满足任何一种需求。例如 Java 就属于 GPL,它可以在 PC 或移动设备上运行,嵌入到银行、金融、保险、制造业等各种行业的应用中去。
关系型数据库:
结论:关系型数据库是存储系统,但是在存储之外,有发展出其他能力
其他能力:对结构化数据友好 支持事务(ACID) 支持复杂查询语言(sql语言)
非关系型数据库:
结论:非关系型数据库也是存储系统,但是一般不要求严格的结构化
对半结构化数据友好 不一定支持事务 不一定支持复杂的查询语言
数据库vs经典存储
结构化数据管理: 经典存储让薄纱。编程人员作为数据的管理者太坐牢了
事务能力:
A(tomicity):事务的原子性,要么全做,要么不做
C(onsistency):事务的连续性,事务执行前后数据状态是一致的。
I(solation):可以隔离多个并发事务,避免相互影响
D(urability):事务一旦提交成功,数据就可以保持持久性
支持复杂查询能力:
3.主流产品剖析:
3.1单机存储
单个计算机节点上的存储系统软件,一般不涉及网络交互(本地文件,key-value)
Linux系统哲学:一切皆文件
文件系统接口:种类繁多,但都遵循VFS的统一抽象接口
Linux文件系统的两大数据结构:Index Node(文件的唯一标识)和Directory Entry(全内存结构)
世间一切皆key-value——key是身份证,value是内涵
3.2分布式存储
在单机存储系统基础上实现了分布式协议,设计大量网络交互
分为:分布式文件系统 分布式对象存储
3.3 单机关系型数据库
商业:oracle
开源:MySQL&PostgreSQL
单个计算机节点上的数据库系统,可以在单机内执行,也可以通过网络连接
3.4单机非关系型数据库
三足鼎立:MongoDB(灵活),Redis(主打一手高性能,具有多种数据结构),Elasticsearch(强大的搜索功能,如内嵌了模糊匹配算法)
3.5 分布式数据库
单机数据库遇到了很多棘手的问题:
- 硬盘容量受硬件限制——>存储节点池化(Storage pool),动态的扩缩容
- 弹性:
- 性价比
所以推出了分布式数据库。
4.新技术的演进:
1.软件架构变更升级
2.AI增强
3.硬件革命