力软 java主从表保存_JAVA常用知识总结(十二)——数据库(二)

MySQL主从热备份工作原理

简单的说:就是主服务器上执行过的sql语句会保存在binLog里面,别的从服务器把他同步过来,然后重复执行一遍,那么它们就能一直同步啦。

a8d3e1912b9154dbea60e8d06ab9e673.gif

整体上来说,复制有3个步骤:

作为主服务器的Master,会把自己的每一次改动(每条sql语句)都记录到二进制日志Binarylog中。

作为从服务器Slave, 会用master上的账号登陆到 master上,读取master的Binarylog,写入到自己的中继日志 Relaylog。

然后从服务器自己的sql线程会负责读取这个中继日志,并执行一遍。

MySQL索引的作用与数据结构

DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行就会非常快,所以其查询速度就会非常快。

Mysql索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。

Mysql的BTree索引使用的是B数中的B+Tree(https://mp.weixin.qq.com/s/jRZMMONW3QP43dsDKIV9VQ),B+tree的优点为B+tree的磁盘读写代价更低,B+tree的查询效率更加稳定

MySQL 常见的两种存储引擎MyISAM与InnoDB的理解

关于二者的对比与总结:

两种存储引擎MyISAM与InnoDB的实现方式的不同:

1.主索引的区别:InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。

2.辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。

MyISAM: B+Tree叶节点的data域存放的是数据记录的地址,索引文件和数据文件是分离的。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其 data 域的值,然后以 data 域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。

InnoDB: 其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引(非聚集索引),辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,在走一遍主索引。 因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。

不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白1、为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,2、用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

两种存储引擎MyISAM与InnoDB的功能的不同:

count运算上的区别:因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。而对于InnoDB来说,则没有这种缓存。

是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

是否支持外键: MyISAM不支持,而InnoDB支持。

MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。

一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。(https://zhuanlan.zhihu.com/p/49947103)

InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。

MySQL中的锁

6a3dbfaefb84f0bd9c1741437e68b03f.png

乐观锁是一种思想,具体实现是,表中有一个版本字段,第一次读的时候,获取到这个字段。处理完业务逻辑开始更新的时候,需要再次查看该字段的值是否和第一次的一样。如果一样更新,反之拒绝。之所以叫乐观,因为这个模式没有从数据库加锁,等到更新的时候再判断是否可以更新。

悲观锁是数据库层面加锁,都会阻塞去等待锁。

(https://juejin.im/post/5b55b842f265da0f9e589e79#comment)

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

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

相关文章

HttpClient和DefaultHttpClient

HttpClient 是接口,DefaultHttpClient是实现这个接口的子类 public interface HttpClient {/*** Obtains the parameters for this client.* These parameters will become defaults for all requests being* executed with this client, and for the parameters of…

Go语言版黑白棋

1、游戏说明2、无边框窗口实现3、背景图、最小化、关闭窗口4、界面其它设计5、黑白子提示闪烁效果6、落子7、初始化棋子、改变角色8、倒计时9、吃子10、棋子个数统计、胜负判断11、机器落子 转载于:https://www.cnblogs.com/tennysonsky/p/8442827.html

vue使用render渲染jsx

vue&jsx文档 vue实例属性 // App.ts import hBtn from ./components/hBtn import hUl from ./components/hUlexport default {data(){return {theme: "mdui-theme-pink",accent: "mdui-theme-accent-pink",users:[aoo, boo, coo]}},methods:{},render(…

java中的多线程有什么意义_Java多线程与并发面试题(小结)

1,什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一…

IT必须掌握的常用命令

一,ping      它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们…

Callable类

(一) Callable和Runnable比较相似,都可以用来实现线程任务。但callable使用了泛型设计,使用一个V类型值,能够 在执行结束后返回一个V类型的值。而Runable只会返回一个void,不能够获得执行的结果。 &#x…

Java——线程的创建,线程池

线程 多线程就是一个程序中有多个线程在同时执行。 多线程下CPU的工作原理 实际上,CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而CPU的在多个线程间切换速度…

初级第一旬05— 蓝字观试题

准提法网络佛学院 准提法教学平台 一、高七师提倡初学准提法者,应先观蓝字,在《显密圆通成佛心要集》中有依据吗? 二、正修的时候,如果不得不中断怎么办? 三、蓝字观有几种手印?可以单独使用吗?…

java并查集找朋友圈_图—并查集(解决朋友圈问题)

图也是一种 非线性结构,是由多个顶点组成的关系集合组成的一种数据结构。图可以分为两种,无向图和有向图。★图的定义:★典型问题:利用图能够解决很多问题,这里有一个较为典型的问题,假如已知有n个人和m对好友关系(存于…

技术这东西,不可不看,不可全看.

最近忙着玩开心,好久没来CSDN了,首页上有90后程序员的消息了,稍微感慨一下,曾几何时,自己这个80后还被70后的前辈所笑话,转眼就成了5年经验的老油条了.呵呵. 5年,个人认为经历还是有些代表性的,就跟刚入行或者即将入行的哥们交个底吧,这5年到底学到了什么. 如果你看完这篇文…

rand.nextint()

自从JDK最初版本发布起,我们就可以使用java.util.Random类产生随机数了。在JDK1.2中,Random类有了一个名为nextInt()的方法:public int nextInt(int n)给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即&a…

Android开发常用的插件及工具

1、GitHub,这个不管是做安卓还是其他,只要是开发就必上的网站,也是天朝没有墙掉为数不多的网站 2、Stack OverFlow,这个和上面一样,国外非常著名的问答网站,在上面基本上很多问题都可以得到解决 3、Genymotion模拟器,搞…

java poi 设置标题_poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等...

POI生成Word时,设置段落的样式String style "2"; //标题2的样式XWPFParagraph xwpfParagraph doc.insertNewParagraph(run);xwpfParagraph.setStyle(style);其实设置其他的样式都一样。例如:你想设置你的样式为“标题2”(“标题2”只是你在w…

使用python做最简单的爬虫

使用python做最简单的爬虫 --之心 #第一种方法import urllib2 #将urllib2库引用进来responseurllib2.urlopen("http://www.baidu.com") #调用库中的方法,将请求回应封装到response对象中htmlresponse.read() #调用response对象的read(&#x…

SurfaceView介绍

SurfaceView介绍 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI线程的操作和绘制)。但是在其他线程中却不能修改UI元素&…

产品与市场,究竟哪一个重要

上篇我们讲到B2C继B2B和C2C红透之后,也正在迅速的窜红。这一看法可不是我老邢杜撰,凭空想出来的,我们也可以从近期的主要媒体杂志上看到这个弥端。《二十一世纪报道》、《创业家》、《市场与营销》这些经济类杂志,均用大幅篇幅甚至…

enumerate()使用

enumerate()使用 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写: list1 ["这", "是", "一个", "测试"] for i in range (len(list1)): print i ,list1[i] 上述方法有些累赘&#xff0…

php在window,php在window上的问题

C:/php-7/php-cgi.exe -b 127.0.0.1:9000 -c C:/php-7/php.ini用以上方式打开php的话,会自动的关闭,到处查了后说什么东西默认是500次,到了的话cgi就会关闭所以才想到用以下的批处理办法去解决echo offecho Starting PHP FastCGI...set PHP_F…

(三)SpringBoot之配置文件详解:Properties和YAML

一、配置文件的生效顺序,会对值进行覆盖: 1. TestPropertySource 注解2. 命令行参数3. Java系统属性(System.getProperties())4. 操作系统环境变量5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource6. 在打包的j…

fscanf()php,fscanf函数的用法

以前解析有规律的文件的时候要么用正则表达式,要么就是傻傻的自己写程序来解析有规律的文件。今天突然发现c的库函数中有一个现成的可以解析有规律的文件的函数,就是fscanf()函数。fscanf 位于头文件中,函数原型为 int fscanf(FILE * stream,…