作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的.不了解数据库的有所帮助. 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出. 数据库的定义 很多开发者在最开始时其实都对数据…
一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vxlan技术.首先我们了解下随着云计算的发展,传统网络面临哪些挑战. 1.虚拟机迁移范围受到网络架构限制 虚拟机迁移,顾名思义,就是将虚拟机从一个物理机迁移到另一个物理机,但是要求在迁移过程中业务不能中断.要做到这一点,需要保证虚拟机迁移前后,其IP地址.MAC地址等参数维持不变.这就决定了,虚拟机迁…
文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解InnoDB存储引擎实现的多版本控制技术(简称:MVCC). 基本知识 假设对于多版本控制(MVCC)的基础知识,有所了解.MySQL数据库InnoDB存储引擎为了实现多版本的一致性读,采用的是基于回滚段的协议. 行结构 MySQL数据库InnoDB存储引擎表数据的组织方式为主键聚簇索引.由于采用索引…
MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化. 锁就是其中的一种机制.我们用商场的试衣间来做一个比喻.试衣间供许多消费者使用.因此可能有多个消费者同时要试衣服.为了避免冲突,试衣间的门上装了锁.试衣服的人在里边锁住,其他人就不能从外边打开了.只有里边的人开门出来,外边的人才能进去. - 锁的基本…
Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. 而导致行锁变为表锁的情况之一就是: SQL的更新(update)或者删除(delete)语句中未使用到索引,导致在InnoDB在对数据进行相应操作的时候必须把整个表锁起来进行检索(表锁).而如果使用了索引的话,InnoDB只会通过索引条件检索数据,而只锁住索引对应的行(行锁). 下面记录一下我遇到…
mysql之innodb存储引擎 innodb和myisam区别 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持 innodb的关键特性 Iinnodb存储引擎的关键特性包括:插入缓冲,两次写,自适应哈希索引 插入缓冲 主键是行唯一的标识符,在应用程序中行记…
分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据丢失而导致数据不一致怎么办? Innodb主要是通过事务日志实现ACID特性,事务日志包括:重做日志redo和回滚日志undo. Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录文件是ib_logfile0 ib_logfile1 Undo记录的是已部分完成并且写入硬盘的未完成…
MySQL数据库InnoDB存储引擎Log漫游  http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/…
一个执着于技术的公众号 前言 在前面的章节中,我们已经学习了nginx基础知识: 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 今天我们通过两个实例,带大家读懂nginx反向代理 Nginx反向代理实例 1 1.实现效果 打开浏览器,在地址栏输入地址www.test.com,跳转到百度首页. 2.准备工作 (1)在Linux系统安装nginx 1)创建用于运行Nginx的用户 usera…
一个执着于技术的公众号 一.简述 在一群动物掌管的世界中,动物没有人类聪明的思想,为了保持动物世界的生态平衡,这时,动物管理员-zookeeper诞生了. 打开Apache zookeeper的官网,一句话定义zookeeper:Apache ZooKeeper致力于开发和维护可实现高度可靠的分布式协调的开源服务器. zookeeper是个服务,服务的对象我们都称为客户端,在大数据生态里面的客户,hadoop.hbase.hive-组件都是分布式部署,这些组件们利用zookeeper的服务做了一…
写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵.实践是检验真理的唯一标准,于是就想在数据库上测试一些性能优化的方案,比如索引之类的,但是不想使用假的数据,于是就想着能不能抓取网上的一些数据来作分析,后来自己通过PHP抓取了一些数据(查看抓取数据博文),抓了大约110W的用户数据之后,当然需要统计一下具体的数量,于是我使用了以下的SQL语句(我使用的存储引擎…
近期碰到非常多锁问题.所以攻克了后,细致再去阅读了关于锁的书籍,整理例如以下:1,锁的种类 Innodb存储引擎实现了例如以下2种标准的行级锁: ? 共享锁(S lock),同意事务读取一行数据. ?  排它锁(X lock).同意事务删除或者更新一行数据. 当一个事务获取了行r的共享锁.那么另外一个事务也能够马上获取行r的共享锁,由于读取并未改变行r的数据.这样的情况就是锁兼容. 可是假设有事务想获得行r的排它锁,则它必须等待事务释放行r上的共享锁-这样的情况就是锁不兼容.二者兼容性例如以下表…
1. MySQL 的存储引擎 MySQL 数据库的一大特色是有插件式存储引擎概念.日常使用频率最高的两种存储引擎: InnoDB 存储引擎支持事务,其特点是行锁设计.支持外键.非锁定读(默认读取操作不会产生锁).1.2.x 开始支持全文索引.数据存储方面,InnoDB (即指 InnoDB 存储引擎) 采用了聚集 (clustered)的方式,每张表的存储都是按逐渐的顺序进行存放.(如果没有显式定义主键, InnoDB 会为每行生成一个6字节的 ROWID,并以此作为主键) MyISAM存储引擎…
很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了一遍书.与此同时,也加深一下对MySQL的了解,认识了原理,对优化的原则才有把握,对问题的分析才有源头. 关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希.B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树…
一.Innodb体系架构 1.1.后台线程 后台任务主要负责刷新内存中的数据,保证缓冲池的数据是最近的数据,此外还将修改的数据刷新到文件磁盘,保证在数据库发生异常的情况下Innodb能恢复到正常的运行状态. 1.Master Thread主要负责缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓冲undo页的回收等. 2.IO Thread主要负责IO请求的回调(call back)(有如下四种io线程)write IO :innodb_write_io_threads=8…
一.背景 1.1文件组织架构 首先看一下mysql数据系统涉及到的文件组织架构,如下图所示: msyql文件组织架构图 从图看出: 1.日志文件:slow.log(慢日志),error.log(错误日志),general.log(基本日志) 2.配置文件:my.cnf 3.数据库:performance_schema,mysql,information_schema,sys 4.innodb存储引擎(框中部分),主要包括有:两个日志文件ib_logfile0和ib_logfile1,由参数inn…
在阅读本篇文章可能需要一些B树和B+树的基础 一.B树和B+树的区别 1.B树的键值不会出现多次,而B+树的键值一定会出现在叶子节点上,而且在非叶子节点也可能会重复出现2.B数存储真实数据,B+数叶子节点存储真实数据,非叶子节点存储只存储键值3.B树的查找效率和键在树中所在的位置有关,B+树的复杂度是固定的,即树的高度4.B树的键位置不固定,键不重复,节约存储空间,但是在插入和删除等操作性能低.B树的深度较B+树要深,耗费磁盘IO次数就多 二.聚簇索引和辅助索引 1.聚集索引(聚簇索引)   …
熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile.之后innodb再异步地将新事务的数据异步地写入Datafile,真正存储起来. 那么innodb引擎有了redo log和buffer pool以后,为什么能够在提升性能的同时,还能保证不丢数据呢? Buffer Pool, Redo Log以及Datafile之间的具体关系是什么呢. 另外Innodb还有一大…
InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表. InnoDB 体系架构 InnoDB 主要包括了: 内存池.后台线程以及存储文件. 内存池又是由多个内存块组成的,主要包括缓存磁盘数据.redo log 缓冲等: 后台线程则包括了 : Master Thread.IO Thread 以及 Purge Thread 等: 由 InnoDB 存储引擎实现的表的存储结构文件一般包括表结构文件(.frm).共享表空间文件(ibdat…
MySQL 里还有什么其他成员呢? 对于 MySQL,要记住.或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图: 遇到问题,或者学习到新知识点时,就往里套,想一想,这是对应这两张图的哪个模块.是属于具体哪个成员的能力. 这其中,第一张图的最底下的存储引擎层(Storage Engines),它决定了 MySQL 会怎样存储数据,怎样读取和写入数据,也在很大程度上决定了 MySQL 的读写性能和数据可靠性. 对于这么重要的一层能力,MySQL 提…
之前<零基础带你看Spring源码--IOC控制反转>详细讲了Spring容器的初始化和加载的原理,后面<你真的完全了解Java动态代理吗?看这篇就够了>介绍了下JDK的动态代理. 基于这两者的实现上,这次来探索下Spring的AOP原理.虽然AOP是基于Spring容器和动态代理,但不了解这两者原理也丝毫不影响理解AOP的原理实现,因为大家起码都会用. AOP,Aspect Oriented Programming,面向切面编程.在很多时候我们写一些功能的时候,不需要用到继承这么…
innodb是支持事务的存储引擎,支持ACID特性的ACID(指数据库事务正确执行的四个基本要素的缩写) 包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability) 更适合处理大量的小事务,小事务正常都会被提交,很少会被回滚,在数据存储的方式上也有很大不同 innodb有自己的表空间,数据存储在自己的表空间中的,存储在什么样的表空间中,主要由innodb_file_per_table 这个参数决定,如果这个参数为on,则建立…
索引分类: 1.聚集索引:索引顺序与物理顺序一致. MySql 的 InnoDB 中,主键索引就是聚集索引.好处是,进行搜索的时候,因为索引和物理顺序一致,所以找数据的时候更快. 2.非聚集索引:索引顺序与物理顺序不一致. 非主键索引. 在非主键索引中,又有组合索引(最左索引:也就是查询的时候如果where条件里面没有最左边的一到多列,索引就不会起作用). 区别: 由于聚集索引的有序性,因此十分适合范围查找.当找到相应的范围区间,就直接获取数据.(类比为数组) 由于非聚集索引的索引顺序月物理存储…
前言 任何系统不管在什么阶段都需要关注生产环境错误日志,最近几个月内,发现偶尔会出现数据库死锁情况.以前碰到的数据库类错误大部分是SQL语法造成的错误,来到新东家之后才第一次碰到死锁情况,以前是搞游戏开发,现在是搞电商类开发,可能是不同的项目不同的业务的原因吧,查阅了各种资料后发现,是我想错了:(.一般业务瓶颈在数据库层,对于数据库层的问题需要重点关注,以为死锁这种情况是很严重的问题,这个要分情况,偶尔死锁对业务不会有太大的影响,我又想错了:(. 虫子发现  第一次发现死锁很惊讶,这个是什么鬼?…
先上InnoDB架构图: 自上而下依次为内存区结构,后台线程,操作系统,磁盘存储,日志文件等. 其中内存由缓冲池,额外缓冲池,日志缓冲池组成.其中缓冲池中结构如下: 在磁盘存储文件中,MyISAM存储引擎采用元数据,数据,索引三分的文件存储方法,而InnoDB采用元数据,数据(=索引)方式存储,这个主要由于InnoDB采用B+树结构实现.所以我们在架构图中看到存储的table1包含Primary key& data.其结构如下图 关于InnoDB的这种存储结构以及其对索引的影响,详见:MySQL…
并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JMM内存模型原理,深入synchronized原理,深入volatile原理,DCL,详解AQS,CAS,可重入锁,读写锁原理,详解并发工具类,深入理解threadLocal,Fork.Join,原子类详解,Java并发集合详解(ConcurrentHashMap,ConcurrentLinedQue…
摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, GaussDB产品究竟有哪些亮点呢? 11月18日,由ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙在北京进行,华为云数据库业务总裁苏光牛及多位技术专家在会上分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势. 本次沙龙中,苏光牛提到:未来云数据库会朝多元化.开放融合.…
一 简介 1.了解Docker的前生LXC LXC为Linux Container的简写.一种轻量级的内核虚拟化技术,隔离进程和资源. Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次的虚拟化. 2.LXC与docker什么关系? docker并不是LXC替代品,docker底层使用LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配. 在LXC的基础之上,doc…
SLAM是Simultaneous localization and mapping缩写,意为“同步定位与建图”,主要用于解决机器人在未知环境运动时的定位与地图构建问题,为了让大家更多的了解SLAM,以下将从SLAM的应用领域.SLAM框架.SLAM分类(基于传感器的SLAM分类)来进行全面阐述,本文仅对没有接触过SLAM的新人进行的科普. 一.SLAM的典型应用领域 机器人定位导航领域:地图建模.SLAM可以辅助机器人执行路径规划.自主探索.导航等任务.国内的科沃斯.塔米以及最新面世的岚豹扫地…
hi,大家好,我是大D.今天咱们继续深挖一下 HBase 的架构组成. Hbase 作为 NoSQL 数据库的代表,属于三驾马车之一 BigTable 的对应实现,HBase 的出现很好地弥补了大数据快速查询能力的空缺.在前面咱们也有介绍过 HBase 的数据模型,感兴趣的小伙伴可以翻看下.谈谈你对HBase数据模型的认识? HBase 的核心架构由五部分组成,分别是 HBase Client.HMaster.Region Server.ZooKeeper 以及 HDFS.它的架构组成如下图所示…