当前位置: 首页 > backend >正文

数据库补充知识

目录

1、简介

2、为什么要用数据库

3、数据库的分类


1、简介

数据库简称 DB,是按照数据结构来组织、存储和管理数据的仓库,用户可以对文件的数据进行增加、删除、修改、查找等操作。 区分一下,数据库管理系统简称DBMS,是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库(DB)。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

2、为什么要用数据库

  1. 数据库可以存储大量的数据信息,方便用户进行有效的访问。数据库还可以对数据进行分类保存,并且能够提供快速的查询。

  2. 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。

  3. 数据库技术能够方便智能化地分析,产生新的有用信息。

3、数据库的分类

        关系型数据库 采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。下面是常见的一些关系型数据库: MySQL: 免费的数据库系统。被广泛用于中小型应用系统。体积小、速度快、总体拥有成本低,开放源代码

image.png

SQL Server : 是由微软公司开发的一种关系型数据库管理系统(RDBMS),用于存储和检索数据。它提供了一个可扩展的、安全的和可靠的数据存储和管理解决方案。

image.png

Oracle: 是目前比较成功的关系型数据库管理系统。运行稳定、功能齐全、性能超群、技术领先。主要应用在大型的企业数据库领域。

image.png

4.原理       

 数据库的每张表都是以文件的形式存储到硬盘上的,数据只要是在硬盘上一定以文件形式存储,当表的数据特别大时文件也会特别大,所以一个文件会达到几百M,G等等大小  

 

                数据库是在内存中运行的(所有程序都在内存运行),mysql是以进程的形式占据内存的某个区域;当想从表中查询某个数据,需要把整个表经过总线加载到内存进行查询,数据太多的时候总线承压就很大;这时候就会建立索引(相当于对数据进行排序),这样可以加快查询速度

 

        文件进入内存的时候,是以数组的形式进入的(即流、不管是文件流还是其他如比特流,都是数组),数据库的每行数据都是固定长度,占据一个固定的数据单元,当创建索引的时候,查询的时候只会加载索引文件这一列(比原数组小得多)并附有源文件的地址,查询的时候就可以根据索引从树中查询到目标地址进而找到原文件,时间复杂度降到log,增大读取速度  

        读取数据的时候不再加载原表,而是加载索引文件,根据找到的索引文件知道目标地址,然后直接向硬盘下达地址指令,不需要再将文件加载到内存中了,直接读取找到目标文件,降低总线压力、减小内存,增快速度,性能变好  

        所以高并发系统不允许一个表存储数据太多(一般数据达到几百万的时候就需要把表拆掉了),这样的话索引文件也会很大!!!

        最大的问题是所有数据存在一起,好处是求整体/关联计算的时候方便(最大/最小/平均等),所以myysql叫关系型数据库,擅长整体计算;但是处理单条数据的时候很麻烦,这时候就出现了非关系型数据库,如hive\hbase\zk\es ,数据分开存放,不再形成一个大文件,划分的文件小,定点操作,支持高并发

5、内存数据库  -redis  

        redis整个数据都在内存中,通过哈希表的散列把数据弄成一份一份的,Redis内部用一种叫哈希表的数据结构来存储数据。哈希表就像一个有很多小格子的柜子,每个格子都有一个编号(哈希值)。当你存数据时,Redis会根据数据的键(key)计算出一个哈希值,然后把数据放到对应的格子里。当你找数据时,它会直接根据键找到对应的格子,很快就能拿到数据。

        redis速度很快,由于内存的空间小,所以只能存一部分访问频率很高的数据到redis中,所有活跃数据常驻内存,实现纳秒级访问;缺点是可能会丢数据,Redis 服务器突然断电或出现硬件故障,内存中的数据会丢失,使用定时备份也会丢失一部分数据,因为如果数据备份间隔期间发生故障,可能会丢失这段时间内的数;解决方案是用一个消息队列配合redis使用,丢失的数据可以通过消息队列还原

6、数据库访问流程

        进程之间通过端口通信,端口是用来识别不同程序的标志,网卡会把数据存储起来按照端口进行分类;每个程序会定时来其端口查取数据,所有的程序它的底层只要涉及到网络发送和接收的一定是socket         

  1. Socket通信

    • 进程间通过端口进行通信,端口是识别不同程序的标志

    • 网卡接收数据后按照端口分类存储

    • 程序定时检查自己的端口获取数据

    • 所有涉及网络通信的程序底层都使用socket

  2. 数据库访问流程

    • 应用程序(Java/Python/Go/C#等)通过socket发送SQL语句到数据库端口(MySQL默认3306)

    • MySQL服务监听指定端口,接收SQL请求

    • 数据库引擎解析SQL语句字符串

    • 执行查询/更新操作

    • 将结果通过同一socket连接经过同一个端口返回给应用程序返回给应用程序

http://www.xdnf.cn/news/4605.html

相关文章:

  • 人脸识别技术应用管理办法的影响
  • 网络编程之端口号
  • 主数据管理与数据治理有什么关系?
  • 大模型 Agent 技术:开启智能交互新时代
  • Mermaid的常见用法
  • Oracle 数据布局探秘:段与区块的内部机制
  • 制作一款打飞机游戏40:点选敌人
  • 编写程序,统计两会政府工作报告热词频率,并生成词云
  • 【icpc陕西省赛】树的最大深度+基环树找环的大小
  • 注意力(Attention)机制详解(附代码)
  • LeetCode205_同构字符串
  • NHANES指标推荐:AISI
  • QML 动态加载组件
  • 论文解析[13] MIXED TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION
  • 【C++】C++11(上)
  • RDD的处理过程
  • vue3的新特性
  • Spring cloud loadBalancer 负载均衡
  • Qwen2-VL详解
  • Unity3D 游戏内存优化策略
  • Anchor-based 和 Anchor-free
  • 修改图像分辨率
  • SLAM:单应矩阵,本质矩阵,基本矩阵详解和对应的c++实现
  • AtCoder 第404场初级竞赛 A~E题解
  • 【无标题】云计算运维
  • 代码随想录算法训练营第60期第二十九天打卡
  • 前端代码规范详细配置
  • CSS手动布局
  • 60页PDF | 四川电信数据湖 + 数据中台实施方案:覆盖数据能力、数据资产及数据治理的全流程建设指南
  • 从xjtu-sy数据集中看轴承故障的发展趋势与基本特征