数据库笔记

59 阅读5分钟

数据库

1.数据库案例:

目的:

数据持久化:

1.校验数据的合法性

2.修改内存,利用高效的数据结构将数据储存起来

3.将数据写入存储介质(高性能,高稳定性,硬件寿命高)

潜在的问题:

  • 数据能维持多少时间?
  • 怎么处理多人同时修改数据?
  • 除了数据库还能存到别的存储系统吗?
  • 只能处理结构化数据吗?
  • 别整那些没用的,怎么拿代码上手?

2.存储技术与数据库简介:

2.1存储系统:

能读,能写,能安全有效的把数据持久化的软件。

关注点:用户 介质 内存 网络

系统特点:

作为后端软件的底座,性能敏感

代码既“简单”(为了高性能)又“复杂”(考虑到多种可能发生错误的情况)

软件架构容易受硬件影响

缓存:很重要,贯穿整个存储体系

拷贝:很昂贵(对cpu和内存消耗很大),应该尽量减少

硬件方面应该有一个统一的接口。

存储技术——RAID技术

整个问题来源于一个问题:性价比: 不想花钱还想要高性能高稳定性

answer:R(edundant) A(rry) of I(nexpensive) D(isks)

image-20230527155302564

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):事务一旦提交成功,数据就可以保持持久性

支持复杂查询能力:

image-20230527161000968

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),动态的扩缩容
  • 弹性:image-20230527170515835
  • 性价比

所以推出了分布式数据库。

More_to_Do

4.新技术的演进:

1.软件架构变更升级

2.AI增强

3.硬件革命