数据库原理

SQL Server数据库原理及部署

╄→尐↘猪︶ㄣ 提交于 2019-12-27 18:08:43
一、使用数据库的必要性 使用数据库可以高效且条理分明地存储数据,使工作人员能够更加迅速、方便地管理数据。数据库具有以下特点: 可以结构化的存储大量的数据信息,方便用户进行有效的检索和访问; 可以有效地保持数据信息的一致性、完整性、降低数据冗余; 可以满足应用的共享和安全方面的要求; 常见的数据库有:SQL Server、MySQL、Oracle等,SQL Server是运行在Windows操作环境中,拥有相对比较友好的图形化界面。 二、数据库的基本概念 1、数据 描述事物的符号记录称为数据,数据不仅仅包括数字、文字、图形、图像、声音、档案记录等都是数据。在数据库中,数据是以“记录”形式按统一的格式进行存储的,而不是杂乱无章的。 2、数据库和数据库表 不同的记录组织在一起,就形成了数据库的“表”。也可以说,表是用来存储具体数据的。简单地说,数据库就是表的集合,它是以一定的组织方式存储的相互有关的数据集合。通常,数据库并不是简单的存储这些数据的,还要表示他们之间的关系,因此,关系的描述也是数据库的一部分。 3、数据库管理系统和数据库系统 数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。DBMS主要包括以下功能: 数据库的建立和维护功能; 数据定义功能; 数据操纵功能; 数据库的运行管理功能; 通信功能;

Redis之AOF重写及其实现原理

a 夏天 提交于 2019-12-26 23:52:22
Reference: https://blog.csdn.net/hezhiqiang1314/article/details/69396887 AOF 重写 AOF 持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大;影响包括但不限于:对于Redis服务器,计算机的存储压力;AOF还原出数据库状态的时间增加; 为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。 AOF 文件重写的实现 AOF重写并不需要对原有AOF文件进行任何的读取,写入,分析等操作,这个功能是通过读取服务器当前的数据库状态来实现的。 # 假设服务器对键list执行了以下命令s; 127.0.0.1:6379> RPUSH list "A" "B" (integer) 2 127.0.0.1:6379> RPUSH list "C" (integer) 3 127.0.0.1:6379> RPUSH list "D" "E" (integer) 5 127.0.0.1:6379> LPOP list "A" 127.0.0.1:6379> LPOP list "B"

SQL注入原理解析以及举例1

点点圈 提交于 2019-12-25 04:40:25
  sql注入是指web应用程序对用户输入数据的合法性没有判断,导致攻击者可以构造不同的sql语句来实现对数据库的操作。   sql注入漏洞产生满足条件:     1;用户能够控制数据的输入。     2;原本需要执行的代码,拼接了用户的输入。   举例:    注意:下面测试环境使用封神台免费靶场。可以从下面链接进入: https://hack.zkaq.org/?a=battle 。   攻击流程:     1;判断是否存在sql注入漏洞。     2;判断网页存在字段数。     3;判断回显点。     4;获取信息。   测试开始:      测试目标获取管理员账号密码     一;判断是否存在sql注入漏洞。       1.1;构建sql语句:?id=1 and 1=2 查看页面是否正常。结果页面显示不正常。       注释:因为id=1为真(可正常访问页面),且1=2为假,所以and条件永远不会成立。对于web应用不会返回结果给用户。则攻击者能看到的是一个错误的界面或者页面结果为空。当然,如果攻击者构造的请求异常,也会导致页面访问不正常。       1.2;构建新的sql语句,确定是否存在语句逻辑错误导致页面不正常。?id=1 and 1=1 结果页面正常,初步判断存在sql漏洞。       注释:1=1 为真,and条件语句成立。     二;判断字段数:

数据库同步原理及常见问题解决方案-运维实记

孤街醉人 提交于 2019-12-24 13:54:13
mysql问题 mysql 主从同步原理 同步过程: 1.在备库B上通过change master命令,设置主库A的IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量 2.在备库B上执行start slave命令,这时备库会启动两个线程,就是图中的io_thread和sql_thread。其中io_thread负责与主库建立连接 3.主库A校验完用户名、密码后,开始按照备库B传过来的位置,从本地读取binlog,发给B 4.备库B拿到binlog后,写到本地文件,称为中转日志 5.sql_thread读取中转日志,解析出日志里的命令,并执行 日志: undo_log:回滚日志 redo_log:重做日志 binlog: 二进制日志 relay_log:中继日志 日志作用参考 主备延迟、主从延迟 数据同步延迟情况参考: show slave status; --> seconds_behind_master , 此参数表示同步延迟时间为多少秒 延迟时间点: 1.主库A执行完成一个事务,写入binlog,时间点time1 2.之后传给备库B,备库B接收完这个binlog,时间点time2 3.备库B执行完这个事务,时间点 time3 time3 减去 time1 的时间差为同步延迟时间,主要是在执行一个事务中备库与主库执行执行完的时间偏差

BUFFER CACHE和SHARED POOL原理

廉价感情. 提交于 2019-12-21 22:19:25
http://blog.csdn.net/wanghai__/article/details/4881492 Buffer Cache LRU与Dirty List 在Buffer Cache中, Oracle 通过几个链表进行内存管理。 LRU list用于维护内存中的Buffer,按照LRU 算法 进行管理。 数据库 初始化时,所有的Buffer都被Hash到LRU list上管理。当需要从数据文件上读取数据时,首先要在LRU List上寻找Free的Buffer,然后读取数据到Buffer Cache中;当数据被修改之后,状态变为Dirty,就可以被移动至Dirty List,Dirty List上的都是候选的可以被DBWR写出到数据文件的Buffer,一个Buffer要么在LRU List上,要么在Dirty List上存在,不能同时存在于多个list。 Buffer Cache 的原理及使用 : ①当一个Server进程需要读数据到Buffer Cache中时,首先必须判断该数据在Buffer中是否存在,如果存在且可用,则获取该数据,根据LRU算法在LRU List上移动该Block;如果Buffer中不存在数据,则需要从数据文件上读取。 ②在读取数据之前,Server进程需要扫描LRU List寻找Free的Buffer

sql注入原理详解(一)

别等时光非礼了梦想. 提交于 2019-12-21 14:44:12
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入?   所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问 数据库 时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站 数据库 的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库 sql注入原理:  下面我们来说一下sql注入原理,以使读者对sql注入攻击有一个感性的认识,至于其他攻击,原理是一致的。 SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据

数据库事务原理及并发、死锁

本小妞迷上赌 提交于 2019-12-18 20:07:18
1. 什么是数据库事务 1.1 数据库事务是指作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执行,要么全部不执行。 1.2 通过ACID实现数据库事务模型 1.2.1 原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。 1.2.2 一致性(Consistemcy):事务执行前后,数据库的状态都满足所有的完整性约束。 1.2.3 隔离性(Isolation):并发执行的事务是隔离的,保证多个事务互不影响。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。通过设置数据库的隔离级别,可以达到不同的隔离效果。 1.2.4 持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 1.3 事务运行的三种模式 1.3.1 自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。 1.3.2 显式事务:以BEGIN TRANSACTION显式开始,以COMMIT或ROLLBACK显式结束。 1.3.3 隐性事务:当连接以此模式进行操作时

ORM实现原理

久未见 提交于 2019-12-18 13:10:41
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 2.什么是Hibernate 对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸收进来,利用它在自己的项目中实现ORM功能。 3.ORM的实现原理 现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出自己的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:映射类

数据库连接池原理分析及模拟实现

时间秒杀一切 提交于 2019-12-16 15:45:46
数据库访问 ​ 访问数据库主要有以下几个步骤: 加载数据库驱动 创建数据库连接 执行访问操作并处理执行结果 关闭连接,释放资源 ​ 在每一次请求数据库都要经历上述过程,创建连接和释放资源也都是些重复性的动作,当请求量比较大时,资源是个很大的浪费。如何优化呢,可以使用连接池。 连接池 ​ 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 原理分析 ​ 数据库连接是访问数据库必须的,可以在系统初始化时提前创建一定数量的连接,保存起来,当有创建连接的请求过来时,就直接拿出来,标记为使用中(避免与其他请求拿到同一个),使用完后,再放回连接池中。过程如下 系统在启动时初始化连接池; 向连接池请求可用的数据库连接; 如果没有获取到可用的数据库连接,并且连接池中连接的数量小于最大连接数,则按照规定的步长给连接池中添加连接,然后再获取,如果连接池中的数量已经到了最大连接数还没有获取到可用的连接,则等待其他请求释放了连接后再获取; 使用获取到的数据库连接请求数据库; 将数据库连接放回连接池,供其他连接使用; 简单模拟实现 /** * 连接池对象 */ public class Pool { private String driver = null;

springcloud之CAP原理

蓝咒 提交于 2019-12-14 07:28:25
用来衡量分布式系统架构是否符合要求的重要指导方式.通过一致性,可用性,分区容忍性三个维度,来去衡量一个软件架构. CAP原理 C:一致性 ---多节点数据一致 A:可用性 ---保持服务可用:多节点 P:分区容忍性 ---是否可以将数据存到多个地方 不能同时满足C,A,P AC :放弃分区容忍,物理数据库 AP:可以短暂允许数据不一致 ,nosql数据库 CP:放弃可用性 来源: CSDN 作者: level_Tiller 链接: https://blog.csdn.net/level_Tiller/article/details/103470019