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

数据库补充知识

目录

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连接经过同一个端口返回给应用程序返回给应用程序

相关文章:

  • 【Redis】哨兵机制和集群
  • k8s 中 deployment 管理的多个 pod 构成集群吗
  • 技术视界|青龙机器人训练地形详解(二):添加地形到训练环境
  • Flutter TabBar / TabBarView 详解
  • 办公学习 效率提升 超级PDF处理软件 转换批量 本地处理
  • 重新定义高性能:Hyperlane —— Rust生态中的极速HTTP服务器
  • QMK键盘固件配置详解
  • Azure OpenAI 聊天功能全解析:Java 开发者指南
  • uniapp 震动功能实现
  • AKS 网络深入探究:Kubenet、Azure-CNI 和 Azure-CNI(overlay)
  • 2025年渗透测试面试题总结-网络安全、Web安全、渗透测试笔试总结(一)(附回答)(题目+回答)
  • 【卡特兰数】不同的二叉搜索树
  • Spring 如何解决循环依赖问题?
  • 大模型时代的数据治理与数据资产管理研究方向
  • nginx之proxy_redirect应用
  • 数据结构之栈与队列
  • uniapp tabBar 中设置“custom“: true 在H5和app中无效解决办法
  • uniapp-商城-43-shop 后台管理 页面
  • idea连接mongodb配置schemas
  • yarn的概述
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 花2万多在海底捞办婚礼,连锁餐企要抢酒楼的婚宴生意?
  • 人民日报刊文:守护“技术进步须服务于人性温暖”的文明底线
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 习近平会见斯洛伐克总理菲佐