数据库

【转】分布式架构的演进(JavaWeb)

只谈情不闲聊 提交于 2020-03-18 22:20:31
作者:李小翀 链接: https://www.zhihu.com/question/22764869/answer/31277656 来源:知乎 1.初始 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用linux,应用程序使用JSP/PHP/ASP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 特征: 应用程序、数据库、文件等所有的资源都在一台服务器上。 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了 2.应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver 特征: 应用程序、数据库、文件分别部署在独立的资源上。 描述: 数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。 3.使用缓存提高性能 特征: 数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力

脏读、幻读、不可重复读和丢失更新

杀马特。学长 韩版系。学妹 提交于 2020-03-18 19:49:21
2017年6月5日,天气——雨。 前两天整理之前的学习笔记时,发现对事务并发产生的问题——脏读、幻读、不可重复读和丢失更新这些概念有点模糊,于是又重新温习了一遍,现在把自己的一些理解归纳整理如下,方便大家学习。 锁就是防止其他事务访问指定资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个 数据库 中的数据而不发生数据不一致现象的重要保障。 一般来说,锁可以防止脏读、不可重复读和幻读。 1. 脏读(Dirty Read) ——一个事务读取到了另外一个事务没有提交的数据。 详细解释:当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 事务T1:更新一条数据 -->事务T2:读取事务T1更新的记录 事务T1:调用commit进行提交 此时事务T2读取到的数据是保存在数据库内存中的数据,称为脏数据,这个过程称为脏读。 脏读发生在一个事务A读取了被另一个事务B修改,但是还未提交的数据。假如B回退,则事务A读取的是无效的数据。这跟不可重复读类似,但是第二个事务不需要执行提交。 解决脏读问题:修改时加排他锁,直到事务提交后才释放,读取时加共享锁,读取完释放事务1读取数据时加上共享锁后

事务隔离级别总结

一曲冷凌霜 提交于 2020-03-18 18:56:06
一、事务隔离级别   在数据库系统中, 隔离 是定义一个操作对数据所做的改变如何/何时对其它的 并行 操作可见。     在数据库操作中, 为了有效保证并发读取数据的正确性 ,提出的事务隔离级别。   事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。   二、事务并发执行涉及到的问题   数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况:   脏读(Drity Read):某个事务已更新一份数据还未提交,另一个事务在此时读取了同一份数据,由于某些原因,前一个事务RollBack了操作,则后一个事务所读取到的数据就会是不正确的。   不可重复读(Non-repeatable read):在一个事务的两次相同查询中数据不一致,这可能是两次查询过程中间插入了另一个事务更新了原有的数据。也可以说:事务T1读取某一数据后还未提交,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。   幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。 三、解决方法--4类事务隔离级别   SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的

Mybatis-plus中的常用注解

寵の児 提交于 2020-03-18 18:20:24
@TableName:数据库表相关 @TableId:表主键标识 @TableField:表字段标识 @TableLogic:表字段逻辑处理注解(逻辑删除) @TableId(type= IdType.ID_WORKER_STR) @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。 @TableField(exist = true):表示该属性为数据库表字段。 @TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。 @TableField(fill = FieldFill.INSERT):注解填充字段 ,生成器策略部分也可以配置! @TableName:数据库表相关 @TableId:表主键标识 @TableField:表字段标识 @TableLogic:表字段逻辑处理注解(逻辑删除) @TableId(type= IdType.ID_WORKER_STR) @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。 @TableField(exist = true):表示该属性为数据库表字段。 @TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。 @TableField

如何利用运维面板进行数据库一键安装和管理?

試著忘記壹切 提交于 2020-03-18 14:49:08
某厂面试归来,发现自己落伍了!>>> 数据库的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的管理工具,MySQL是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型 网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 接下来我为大家详细介绍如何通过运维面板云帮手来一键安装数据库以及管理数据库,包括数据库创建、修改、权限设置、备份和恢复。 一、数据库一键安装 在云帮手面板的 ->环境管理模块中,打开 ->软件市场 里面自带不同版本下的环境组件,支持不同场景下的一键安装环境部署,不用自己搭建框架,极速方便的一键配置安装,对于纯小白来说是非常友好的。 SQL数据库:MySQL、SQLServer WEB服务器:IIS、Nginx、Apache FTP服务器:FileZilla Server 环境框架:PHP、.NET Framework 管理工具:phpMyAdmin、TightVNC 二、创建数据库 1. 点击"添加数据库",显示创建数据库弹框 填写相关信息后,点击"确定" 2.列表中展示已创建好的数据库 三、修改 ROOT 密码 1.点击"修改 ROOT 密码",显示修改数据库 ROOT

Mysql数据库写入数据速度优化

泄露秘密 提交于 2020-03-18 14:33:08
Mysql数据库写入数据速度优化 1)innodb_flush_log_at_trx_commit 默认值为1;设置为0,可以提高写入速度。 值为0:提升写入速度,但是安全方面较差,mysql服务器宕机可能会造成数据丢失。 值为1:每一次事务提交或者事务外的指令都需要把日志写入硬盘,此过程消耗时间较长; 值为2:是每次操作不写入硬盘,而是写入系统缓存,日志仍然会每秒刷新硬盘; 2)innodb_autoextend_increment默认值为8M,调整为128M ; 此配置项作用主要是当tablespace 空间已经满了后,需要MySQL系统需要自动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加自动扩展Size可以减少tablespace自动扩展次数。 3)innodb_log_buffer_size默认值为1M,调整为16M ; 此配置项作用设定innodb 数据库引擎写日志缓存区;将此缓存段增大可以减少数据库写数据文件次数。 4)innodb_log_file_size默认值为 8M,调整为128M ; 此配置项作用设定innodb 数据库引擎UNDO日志的大小;从而减少数据库checkpoint操作。 5)bulk_insert_buffer_size默认值为8M,调整为100M; 作用于使用 MyISAM存储引擎

Mysql主从复制

有些话、适合烂在心里 提交于 2020-03-18 14:26:37
一:主从复制 一:介绍 主从复制就是从库不断向主库要数据,来更新自身的数据库以便自身的数据库数据和主库相同。基于二进制日志完成的. 作用: 1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。 2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。 3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。 简单流程介绍:从库读取master.info 中最后一个二进制日志(例mysql-bin.000012)序号和主库连接信息去连接主库(构建的是长链接,会一直问主库要数据),主库通过show master status查看当前最新的二进制日志,假设是mysql-bin.000020,那么主库就会将12-20之间的二进制日志都通过dump线程发送给从库,然后从库进行一系列的更新。 简单搭建一个主从: 构建如下一个主从 Master slave 3307---->3308 1. 3307中创建复制用户 主库开启二进制日志 vim /data/3307/my.cnf log_bin=/data/3307/mysql

sqlite索引的原理

喜你入骨 提交于 2020-03-18 13:59:12
引言 这篇文章 ,里面讲到对于一个41G大小、包含百万条记录的数据库进行查询操作,如果利用了索引,可以把操作耗时从37s降到0.2s。 那么什么是索引呢?利用索引可以加快数据库查询操作的原理是什么呢? 索引的基本原理 数据库提供了一种持久化的数据存储方式,从数据库中查询数据库是一个基本的操作,查询操作的效率是很重要的。 对于查询操作来说,如果被查询的数据已某种方式组织起来,那么查询操作的效率会极大提高。 在数据库中,一条记录会有很多列。如果把这些记录按照列Col1以某种数据结构组织起来,那么列Col2一定是乱序的。 因此,数据库在原始数据之外,维护了满足特定查找算法的数据结构,指向原始数据,称之为 索引 。 举例来说,在下面的图中,数据库有两列Col1、Col2。在存储时,按照列Col1组织各行,比如Col1已二叉树方式组织。如果查找col1中的某一个值,利用二叉树进行二分查找,不需要遍历整个数据库。 这样一来列Col2就是乱序的。为了解决这个问题,为Col2建立了索引,即把Col2也按照某种数据结构(这里是二叉树)组织起来。这样子查找列Col2时只需要进行二分查找即可。  索引的实现 由于数据库是存储在磁盘上的,因此实现索引用的数据结构会存储在磁盘上。磁盘的IO是需要注意的问题。 二叉树 二叉树是一种经典的数据结构,但是并不适合进行数据库索引。

Mysql 视图&事务&触发器

白昼怎懂夜的黑 提交于 2020-03-18 13:57:11
参考资料 一、视图 视图的含义: 视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表。 1、创建视图 #语法:CREATE VIEW 视图名称 AS SQL语句 create view teacher_view as select tid from teacher where tname='李平老师'; #于是查询李平老师教授的课程名的sql可以改写为 mysql> select cname from course where teacher_id = (select tid from teacher_view); +--------+ | cname | +--------+ | 物理 | | 美术 | +--------+ rows in set (0.00 sec) #!!!注意注意注意: #1. 使用视图以后就无需每次都重写子查询的sql,但是这么效率并不高,还不如我们写子查询的效率高 #2. 而且有一个致命的问题:视图是存放到数据库里的,如果我们程序中的sql过分依赖于数据库中存放的视图, 那么意味着,一旦sql需要修改且涉及到视图的部分,则必须去数据库中进行修改,而通常在公司中数据库有专门的DBA负责, 你要想完成修改,必须付出大量的沟通成本DBA可能才会帮你完成修改,极其地不方便 2、查看视图 select * from course_view; create

MySQL-事物、索引和视图

懵懂的女人 提交于 2020-03-18 13:56:23
1.视图 对于复杂的语句,多次使用时,要维护是一件很麻烦的事情。 解救的办法:就是定义一个视图,相当于编程语言中的封装。 定义视图 语法如下: create view v_student as select * from student where name = zhangsan; 调用: select * from v_student; 2.事物 当一件事情需要多个sql完成时,如果其中的某条语句出错,则希望整个操作都退回。 主要作用是保证命令的完整性。 2.1事物的四大特性 原子性:事物中的全部操作在数据库中是不可分割的,要么全部完成,要么都不完成。 一致性:几个并行执行的任务,其执行结果必须与按照某一顺序执行的结果一致。 隔离性:事物的执行不受其他事物的干扰,事物执行的结果对其他事物必须是透明的。 持久性:对于已经提交的事物,系统必须保证事物对该数据库的改变不曾丢失,即使数据库出现故障。 2.2 使用事物的情况 数据被更改时,包括insert、updata、del等操作进行时使用事物。 要求:表的类型必须是innodb或者bdb类型,才可以使用事物。 查看表的类型:show create table students; 修改表的类型:alter table 表名称 engine=innodb; 事物语句: 开启:begin; 提交:commit; 回滚:rollback; 2