目的 最主要目的提升数据库层面性能,主节点负责写操作,从节点负责读操作。 容错,高可用。 数据备份(搭配快照)。 原理 主从复制有两种方式: 异步复制:默认方式,可能会导致主从切换时数据丢失。因为主库是否commit与主从同步流程无关,也不感知。 半同步复制:高可用方案,较新mysql版本支持(配合插件),需要至少1个从库(默认1,具体数量可指定)对写入 r...
CentOS7 安装 MySQL8
在线安装 # 下载 rpm 包 wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm # 安装 yum repo文件并更新 yum 缓存 rpm -ivh mysql80-community-release-el7-1.noarch.rpm yum clean all yum makecache #...
MySQL MVCC 多版本并发控制
1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。 2、当前读 ...
「转载」数据库知识点整理
存储引擎 InnoDB InnoDB 是 MySQL 默认的事务型存储引擎,只要在需要它不支持的特性时,才考虑使用其他存储引擎。 InnoDB 采用 MVCC 来支持高并发,并且实现了四个标准隔离级别(未提交读、提交读、可重复读、可串行化)。其默认级别时可重复读(REPEATABLE READ),在可重复读级别下,通过 MVCC + Next-Key Locking 防止幻读。 ...
Maven 打包可执行 Jar 包
在 pom.xml 中添加如下内容 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execu...
Maven 打包源码
<build> <plugins> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configur...
ThreadPoolExecutor 整体工作流程
开始 初始化 调用 execute 方法 判断线程数是否小于核心线程数,如果是跳转到则创建核心线程(进入创建线程部分),firstTask 为要执行的任务,如果失败则跳转到4 判断线程池是否是 RUNNING 状态,如果是则放入任务队列如果成功则跳转到5 否则跳转到8 重新校验线程池是否是 RUNNING 状态,如果不是则跳转到6 否则 7 是否可以从队列中移除任...
ThreadPoolExecutor 源码阅读笔记一(JDK 1.8)
线程是个很好的工具,我们知道可以通过 new Thread().start() 的方式去开启一个线程,但是如果纯粹的使用这种方式去创建线程,每来一个任务,创建一个线程,这种方式是存在缺陷的,尤其是在无限制的创建大量线程的时候: 线程生命周期的开销非常高。线程的创建和销毁不是没有代价的。根据平台的不同,实际的开销开销也有所不同,因为线程的创建过程都会需要时间,延迟请求的处理,并且需要 ...
线程安全
概述 《Java Concurrency In Practice》的作者 Brian Geotz 对”线程安全“有一个比较恰当的定义:”当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。“ Java 语言中的线程安全 我们这里讨论的线程安...
Java 和线程
概述 并发不一定要依赖多线程(如 PHP 中很常见的多进程并发),但是在 Java 里面谈论并发,大多数都与线程脱不开关系。讲到 Java 线程,就从 Java 线程在虚拟机中的实现开始讲起。 线程的实现 线程时比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件 I/O 等),又可以独立调度(线程时 CPU 调度...