大型数据库课程知识整理

文章目录

  • 常见数据库有哪些?
  • SQL和NOSQL区别和优缺点
  • 数据库系统可以从那些方面进行优化?
    • 1.应用层的优化
    • 2.数据库设计与配置优化
    • 3.数据库配置优化
    • 4.操作系统和硬件优化
    • 5.架构优化
  • IOE概念
  • Oracle体系结构
    • 物理结构
    • 内存结构
    • 后台服务进程
  • Oracle扩展 RAC
    • 双机热备
  • 表空间
    • 表空间类型
    • 表空间的管理
    • 表空间的操作
  • 两种日志文件
    • 在线重做日志
    • 归档重做日志
  • 管理Oracle实例
    • 启动数据库
    • 关闭数据库的四种模式
  • 备份
  • 监听程序的管理
  • PL/SQL
    • 优点
    • 变量可见性
    • 判断if/else
    • 循环LOOP...EXIT...END
    • 循环LOOP...EXIT WHEN...END
    • 循环while...LOOP...END LOOP
    • 循环for...IN...LOOP...END LOOP
    • 储存过程
  • 触发器
  • 游标
  • 索引(Index)
  • OceanBase

常见数据库有哪些?

关系型数据库:Oracle、MySQL、Microsoft SQL Server
非关系型数据库:Redis、MongoDB
开源数据库:MongoDB、Redis、MariaDB

SQL和NOSQL区别和优缺点

SQL(关系型数据库)基于表,数据结构必须事先定义好;而NoSQL(非关系型或分布式数据库)基于键值对,数据是动态无结构的。

  • SQL优点:结构化数据,能进行复杂查询、有事务处理,可保持数据一致性、精确、有历史数据
  • SQL缺点:数据需要转换为基础类型、扩展较为困难、大量数据的写入处理较慢
  • NOSQL优点:快速、便宜、可扩展、适于保存大量和分层数据
  • NOSQL缺点:缺乏事务处理、不擅长复杂查询、不遵循ACID

数据库系统可以从那些方面进行优化?

1.应用层的优化

应用响应速度的瓶颈:查询缓慢、CPU饱和、网络延迟、文件I/O
使用连接池和缓存。

2.数据库设计与配置优化

优化设计不良或索引不佳的表结构,能把性能提升几个数量级

3.数据库配置优化

包括缓存大小、I/O调优、并发数等,能获得两到三倍的性能提升。

4.操作系统和硬件优化

CPU、内存、I/O、网络、操作系统

5.架构优化

构建大型、高性能应用程序,可分为分散式数据库架构、集中式数据库架构、分布式数据库架构

IOE概念

IBM是服务器提供商,Oracle是数据库软件提供商,EMC则是存储设备提供商,三者构成了一个从软件到硬件的企业数据库系统。

Oracle体系结构

详见此处

物理结构

分为控制文件、数据文件、重做日志文件

  • 控制文件
    记录数据库的物理结构
  • 数据文件
    储存所有数据库数据。逻辑结构中的一个表空间对应一个或多个数据文件。
  • 重做日志文件
    记录数据所发生的修改。

内存结构

系统全局区和程序全局区

  • 系统全局区(SGA)
    系统所有进程共享的内存区域。
  • 程序全局区(PGA)
    为了某个进程所服务的。这个内存区不是共享的,只有用户的服务进程以及后台进程本身才能够访问它自己的PGA区。

后台服务进程

  • 数据库复写器(DBWn)
    管理缓冲储存区,将缓冲区的脏数据写入磁盘
  • 日志复写器(LGWR)
    管理日志缓冲区,将上次写磁盘后的所有日志缓冲写入日志文件
  • 系统监控进程(SMON)
    执行实例恢复
  • 进程监控器(PMON)
    在用户进程出现故障后执行进程恢复
  • 检查点(CKPT)
    修改控制文件信息
  • 归档进程(ARCn)
    自动归档联机重做日志文件

Oracle扩展 RAC

Oracle扩展用得最多的方式是RAC(实时应用集群)
两(多)台服务器上各自运行一个数据库进程,共同管理、操作一个数据库,客服端无论连接哪个都可以操作数据库。当某一个服务器故障时,其他服务器还可以正常工作。由于不需要临时启动新的服务进程,因此没有切换时间。
优点

  • 良好的可伸缩性
  • 高可用性
  • 缓存融合技术
  • 降低硬件成本
  • 切换时间短
    缺点
  • 管理复杂
  • 对网络有较高要求

双机热备

在双机热备份方式下,需要共享存储,数据库系统平时只能在一台服务器 ( 例如服务器 A) 上运行,另一台服务器无法直接访问数据库,自然也无法进行负载分担。当服务器 A 由于故障失效时,由相应的操作系统软件控制,将服务器 A 管理的存储设备 ( 如硬盘 ) 转交给服务器 B 控制,同时在服务器 B 上启动另一个数据库进程,管理数据库。这种切换并启动新的数据库核心的过程一般需要几十秒到几分钟。

表空间

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成
相较于mysql有多个数据库,oracle只有一个数据库,其下有多个表空间。
oracle安装完数据库的一般流程:先建表空间(分区)–>再建用户(分配相应的表空间和用户权限)–>登陆用户,建表

表空间类型

分为系统表空间和非系统表空间

  • 系统表空间随着数据库创建被创建,包含数据字典信息和系统回滚段
  • 非系统表空间包括回滚段、临时段(用于排序操作),控制着分配给用户的空间容量。

表空间的管理

  • 本地管理的表空间
    自由扩展信息被记录在本身的位图中,位图中的每一位都对应一个或一组数据块,显示数据块是否被使用。
  • 字典管理的表空间(缺省)
    自由扩展信息被记录在全局数据字典中

表空间的操作

创建本地管理的表空间

CREATE TABLESPACE userdataDATAFILE '/userfile.dbf' SIZE 500M --储存地址、初始大小EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;

创建字典管理的表空间

CREATE TABLESPACE userdata123DATAFILE '/userfile.dbf' SIZE 500MEXTENT MANAGEMENT DICTIONARYDEFAULT STORAGE (initial 1M NEXT 1M);

两种日志文件

重做日志文件分为在线重做日志和归档重做日志

在线重做日志

又称联机重做日志,指Orcale以SQL脚本的形式实时记录数据库中的数据更新。

归档重做日志

指当条件满足时,Oracle将在线重做日志以文件的形式保存在硬盘。

管理Oracle实例

启动数据库

使用指令startup启动一个数据库
启动步骤:shutdown→nomount(实例启动)→mount(控制文件打开)→open(控制文件描述的所有文件被打开)

关闭数据库的四种模式

关闭模式abortimmediatetransactionalnormal
描述称为终止关闭方式,终止关闭方式具有一定的强制性和破坏性。强制中断任何数据库操作oracle不但会立即中断当前用户的链接,而且会强行终止用户的当前活动事物,将未完成的事物回退阻止任何用户建立新的连接,等待所有活动事物提交后,再断开用户连接,当所有的活动事物提交完毕,所有的用户都断开连接后,将关闭数据库阻止任何用户建立新的连接,等待当前所有正在连接的用户主动断开连接,当所有的用户都断开连接后,将立即关闭数据库
允许新的接入××××
等待直到当前会话都结束×××
等待直到当前事务都结束××
强制执行checkpoint并关闭所有文件×
  • normal、transactional、immediate
    等待数据块高速缓冲区内容全部写入数据文件、未提交的事务回滚、释放资源后才关闭。
    这样关闭后数据库能够保持一致性,重新启动不需要进行实例恢复。
  • abort
    已经修改的数据块缓冲区内容不会写入数据文件、未提交的事务也不会回滚。
    这样关闭的数据无法保证一致性(脏数据库),重新启动后,必须将改变的信息写入重做日志文件、使用回滚段来回滚未提交的改变、且需要释放资源。

备份

备份形式

  • 全库备份
  • 按用户备份
  • 按表备份
  • 表空间备份

监听程序的管理

查看监听程序的状态:

%lsnrctl status

PL/SQL

优点

  1. 允许嵌入sql语句、允许定义常量和变量、允许过程语言结果、允许使用异常处理
  2. 能提高程序的运行性能,降低网络开销
  3. 提供模块化程序设计功能
  4. 具有控制语句
  5. 有良好兼容性

变量可见性

变量的作用域从声明部分开始到块的结束。变量的可见性是可以访问变量引用部分(嵌套块声明了相同变量,外部变量被屏蔽) ,可以用标签引用外部变量outer.v_value

判断if/else

DECLAREnum INTEGER := -11;
BEGINIF num < 0 THENdbms_output.put_line('负数');ELSIF num > THENdbms_output.put_line('正数');ELSEdbms_output.put_line('0');END IF;
END;

循环LOOP…EXIT…END

DECLAREv_num INTEGER := 1;v_mix INTEGER := 1;
BEGINLOOPv_mix := v_mix + v_num;v_num := v_num + 1;IF v_num > 5 THENEXIT;END IF;END LOOP;
END;

循环LOOP…EXIT WHEN…END

DECLAREv_num INTEGER := 1;v_mix INTEGER := 1;
BEGINLOOPv_mix := v_mix + v_num;v_num := v_num + 1;EXIT WHEN v_num > 5;END LOOP;
END;

循环while…LOOP…END LOOP

DECLAREv_num INTEGER := 1;v_mix INTEGER := 1;
BEGINWHILE v_num < 5 LOOPv_mix := v_mix + v_num;v_num := v_num + 1;END LOOP;
END;

循环for…IN…LOOP…END LOOP

DECLAREv_mix INTEGER := 1;
BEGINFOR v_num IN 1..5 LOOPv_mix := v_mix * v_num;END LOOP;
END;

储存过程

CREATE OR REPLACE PROCEDURE 过程名
[(参数名 in|out|in out 类型名)] is
过程体

计算一个数的阶乘

CREATE OR REPLACE PROCEDURE proc(i_num in INTEGER,o_mix out INTEGER) isv_mix INTEGER := 1;v_num INTEGER := 1;
BEGIN WHILE v_num <= i_num LOOPv_mix := v_num * v_mix;v_num := v_num + 1;END LOOP;o_mix := v_mix;
END;

交换两个数

CREATE OR REPLACE PROCEDURE(io_num1 in out NUMBER,io_num2 in out NUMBER)isv_temp NUMBER;
BEGIN v_temp := io_num1;io_num1 := io_num2;io_num2 := v_temp;
END;

两个表join,输出字段

DECLARETYPE t_rec IS RECORD(email account.email%TYPE,pw signon.password%TYPE);t_acc t_rec;
BEGINSELECT account.email, signon.password into t_acc from account inner join signon on signon.username = account.userid where account.userid = '001';dbms_output.put_line(t_acc.email || t_acc.pw);
END;

触发器

游标

定义游标

CURSOR cursor_name[(parameter1[, parameter2, ...])][return datatype]
is select_statement;  -- 但不能使用INTO子句

打开游标

OPEN cursor_name[value1, value2, ...];

不能用open语句重复打开一个游标
提取数据

FETCH cursor_name into {variable_list | record_variable};

variable_list表示table属性定义的数组
record_variable表示表名或游标名定义的record变量(使用%rowtype)
关闭游标

CLOSE cursor_name;

游标实例

DECLARE CURSOR cur is select account.userid from account;v_userid account.userid%TYPE;
BEGINopen cur;fetch cur into v_userid;  -- 必须先fetch,cur%found才会为trueWHILE cur%FOUND LOOPdbms_output.put_line(v_userid);fetch cur into v_userid;END LOOP;CLOSE cur;
END;

使用for循环语句可以省去open、fetch和close语句,且无需判断是否结束

DECLARE CURSOR myCur ISSELECT dep_name FROM departments;
BEGIN FOR v_emp IN my_CUR LOOP  -- 甚至连变量声明都可以省略dbms_output.put_line(v_emp.dep_name);  -- 注意:即使游标只查询一个字段,for循环的隐式变量依然是复合类型END LOOP;
END;

更进一步,可以在for中隐式声明游标

BEGINFOR v_emp IN (SELECT dep_id, dep_name FROM departments) LOOPdbms_output.put_line(v_emp.dep_id);END LOOP;
END;

索引(Index)

优点

  • 提高查询速度
  • 提高分组排序的速度

缺点

  • 创建和维护索引需要耗费时间
  • 索引需要物理空间
  • 对表进行插入、更新和删除时,索引需要动态维护

类别

  • B_tree单列索引
    基于单个列创建的索引
  • B_tree复合索引
    基于多列创建的索引
  • 位图索引
  • 函数索引
    使用列上的函数值作为key,而不是直接使用列的值
  • 反向索引
  • 分区索引和全局索引

OceanBase

产品特性

  • 高可用
  • 分布式
  • 兼容性
  • 高性能
  • 低成本
  • 多租户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux性能优化2.1 CPU性能统计信息

摘要 性能工具&#xff1a;系统CPU 本章概述了系统级的Linux性能工具。这些工具是你追踪性能问题时的第一道防线。它们能展示整个系统的性能情况和哪些部分表现不好。本章将讨论这些工具可以测量的统计信息&#xff0c;以及如何使用各种工具收集这些统计结果。阅读本章后&#…

Spring + hibernate + JPA 配置

最近对hibernate的JPA实现比较感兴趣&#xff0c;在此记录下配置方法&#xff0c;备查。先上maven依赖包配置&#xff0c;这里使用的是spring3.1.2和hibernate3.6.0<dependencies> <dependency><groupId>org.hibernate</groupId><artifactId…

C语言之sprintf使用总结

1、问题 在open ssl 里面输出16进制的随机数 uint8_t *client NULL;client ssl->s3->client_randomfor (int i 0; i < 32; i){printf("client_random is %02x\n", client[i]);} 但是这样输出都是一个一个的打印&#xff0c;我需要连接在一起的字符串 2…

CSS3弹性伸缩布局(一)——box布局

CSS3弹性伸缩布局简介 2009年&#xff0c;W3C提出了一种崭新的方案----Flex布局&#xff08;即弹性伸缩布局&#xff09;&#xff0c;它可以简便、完整、响应式地实现各种页面布局&#xff0c;包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解了。但是这个布局方式还…

Avalonia跨平台入门第十五篇之ListBox聊天窗口

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表;今天趁着大周末的时间接着去摸索基于ListBox的聊天窗口的效果,最终实现的效果如…

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理

本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈&#xff08;原书第2版&#xff09;》一书中的第2章&#xff0c;第2.9节&#xff0c;作者 [英]艾伦朱科尼&#xff08;Alan Zucconi&#xff09; [美]肯尼斯拉默斯&#xff08;Kenneth Lammers&#xff09;&#xff0c;更…

云计算及应用课程知识整理

文章目录一、云计算云计算概念云计算的服务类型云计算技术体系结构的层次及其功能为什么云计算成本低&#xff1f;二、GFS分布式的文件系统设计需要考虑哪些问题&#xff1f;GFS架构GFS容错机制三、分布式数据处理MapReducemapReduce概念MapReduce适合什么类型数据&#xff1f;…

LeetCode之Rotate Array

1、题目 Rotate an array of n elements to the right by k steps. For example, with n 7 and k 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4]. Note: Try to come up as many solutions as you can, there are at least 3 different ways to solve this p…

Android loading进度条使用简单总结

在这里&#xff0c;总结一下loading进度条的使用简单总结一下。 一、说起进度条&#xff0c;必须说说条形进度条&#xff0c;经常都会使用到嘛&#xff0c;特别是下载文件进度等等&#xff0c;还有像腾讯QQ安装进度条一样&#xff0c;有个进度总给人良好的用户体验。 先来找图看…

.NET6之MiniAPI(二十二):HttpClient

说明&#xff1a;本篇不是说明HttpClient怎么使用&#xff0c;而以分享在asp.net core mini api框架下&#xff0c;HttpClient的引入和使用方式。我们在业务开发中&#xff0c;免不了调用三方的服务&#xff0c;这时就会用到HttpClient&#xff0c;在早期的asp.net core框架中&…

《超越需求:敏捷思维模式下的分析》—第1章 1.1节简介

本节书摘来自异步社区《超越需求&#xff1a;敏捷思维模式下的分析》一书中的第1章&#xff0c;第1.1节简介&#xff0c;作者【美】Kent J. McDonald&#xff08;肯特 J. 麦克唐纳&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第一部分 理念…

sublime php语法检查

安装sublimelinter 安装sublimelinter-php 设置sublimelinter 进入SublimeLinter文件夹改动 SublimeLinter.sublime-settings文件 设置php文件夹

使用python获取焦点窗口的进程名称

我正在尝试使用python获取当前焦点窗口的进程名称。现在&#xff0c;我正在与此&#xff1a; import pygetwindow as gw print(gw.getActiveWindow().title)问题在于&#xff0c;这只会显示活动窗口的名称&#xff0c;实际上并没有太大帮助&#xff0c;因为有时应用程序的标题…

Android之jni编译出现no matching function for call to ‘_JNIEnv::GetJava(JNIEnv* , Java VM**)‘解决办法)‘

1、问题 jni编译出现这个错误 no matching function for call to _JNIEnv::GetJava(JNIEnv* &, Java VM**) 2、原因 自己写的 JObject obj NULL; &#xff08;*env&#xff09;->GetObjectClass(env, obj); 这个是在C文件里面这样写&#xff0c;但是cpp文件里面就…

POJ 2240 ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0

http://poj.org/problem?id2240 用log化乘法为加法找正圈 c 110ms,gtle #include <string> #include <map> #include <iostream> #include <cmath> #include <cstring> #include <queue> using namespace std; const int maxn 50; bool …

lv13 环境搭建SD卡启动

一、制作SD卡启动盘 1.1 方法1&#xff1a;在Linux下制作 一、准备好烧录脚本 cd ~/fs4412 ​ unzip sdfuse_q.zip ​ cd sdfuse_q ​ chmod x *.sh 二、将SD卡插入USB读卡器&#xff0c;并连接到虚拟机 或者 一般识别的sd卡会在dev目录下显示sdb 三、烧录 cp ../u-boot-f…

如何使用c#编写单片机程序

因为个人喜爱想研究单片机&#xff0c;但是不太会c&#xff0c;然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序&#xff0c;本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经验&#xff0c;希望帮到热爱c#的xd 首先第一步我们需要…

机器学习与数据挖掘——第二章 数据与数据预处理

一、关于数据 什么是数据&#xff1f; 数据是数据对象的集合及其属性 属性的类型 标称标度 nominal scale 标称属性的值是一些符号或实物的名称&#xff0c;每个值代表某种类别、编码或状态&#xff0c;所以标称属性又被看做是分类型的属性&#xff08;categorical&#xff…

《 线性代数及其应用 (原书第4版)》——1.2 行化简与阶梯形矩阵

本节书摘来自华章出版社《 线性代数及其应用 &#xff08;原书第4版&#xff09;》一书中的第1章&#xff0c;第1.2节&#xff0c;作者:&#xff08;美&#xff09;戴维C. 雷&#xff08;David C. Lay&#xff09;马里兰大学帕克学院 著刘深泉 张万芹 陈玉珍 包乐娥 陆 博 译&a…

Android之jni解决JNIEnv跨线程问题

1、问题 JNIEnv是一个线程相关的变量 JNIEnv 对于每个 thread 而言是唯一的 JNIEnv *env指针不可以为多个线程共用 2、解决办法 java虚拟机的JavaVM指针是整个jvm公用的,我们可以用JavaVM来得到当前线程的JNIEnv指针,可以使用javaAttachThread保证取得当前线程的Jni环境…