MySQL InnoDB存储引擎(一):简介

作者:JerryXia | 发表于 , 阅读 (0)
对于MySQL,大家应该不会陌生,对于数据库,其最重要核心的功能就是如何存储,检索数据库,这将取决于其使用的存储引擎,在MySQL中,有一些可选的存储引擎,如InnoDB,MyISAM,MEMORY等,其中使用最为广泛的则是InnoDB,因为无论从高可用和高性能等方面,其能满足大多数的应用场景,本文将对MySQL的InnoDB存储引擎作一些基本简介,将基于MySQL 5.7。
InnoDB存储引擎简介InnoDB作为比较通用的存储引擎,其在高可用和高性能两方面作了较好的平衡,因此也作为了MySQL的默认存储引擎。相较于其他存储引擎,InnoDB有几点关键的优势:
DML操作支持ACID模型(关于ACID,可以看下之前的这篇文章),事务的提交,回滚,以及在服务器崩溃后的恢复能力;具有的行级锁和Oracle风格的一致性读,以提升多用户的并发访问性能;InnoDB表会基于主键为查询操作作一些存储优化,每一个InnoDB表都具有一个叫作聚簇索引的主键索引,使得在进行主键查询时,可以最小化I/O操作;为了保证数据完整性,InnoDB支持外键约束。通过外键,可以在进行数据插入,更新,删除时,对...阅读全文

Java内存管理基础

作者:JerryXia | 发表于 , 阅读 (0)
2016 年 02 月 20 日jvm众所周之,Java最强大的地方之一就是其自动内存管理机制,也就不需要像C/C++语言那样,需要开发人员手动进行内存管理,需要时刻关注内存应该何时正确地被释放。自动内存管理机制将程序员从内存管理的凶险解脱出来,这将大大提升Java开发人员的生产力,但作为Java开发人员,即使不用直接面对内存管理,但却应该对JVM的内存管理机制有所掌握,对自己的编程能力也会有潜移默化的提升。本文将对JVM内存管理进行一番解读,实现主要是HotSpot Virtual Machine(J2SE 1.5)。
手动内存管理 VS 自动内存管理内存管理的一个主要目标就是识别那些分配的对象不再需要,并且释放掉其所占用的内存空间,以供后续的内存分配使用。有一些编程语言,如C++,开发人员手动管理内存,这将很容易出现很多引起程序错误和崩溃的问题,比如悬挂引用,内存泄漏等,因此开发人员需要花费大量时间来调试和修复。
现在大多数现代面向对象编程语言中,已被广泛应用的另一种内存管理方法:自动内存管理, 其通过垃圾收集器(Garbage Collector)来实现内存管理。只要对象还有...阅读全文

分布式文件系统FastDFS实践

作者:JerryXia | 发表于 , 阅读 (0)
2016 年 05 月 10 日storage最近,需要为业务团队提供图片及文件存储服务,早前,接触过的一些存储方案大概有:利用Linux系统级别的NFS文件服务,即在NFS Server和NFS Client之间进行文件同步,但NFS不太容易实现集群,从而避免单点问题,而且维护起来也比较麻烦,需要同步在接收上传的机器上建立NFS Client;也有利用Nginx+Lua+ImageMagick的方案,但在文件备份等需要借助一些其他手段才能达到。当然也有一些专门的分布式文件系统,如HDFS,GlusterFS等,但主要是针对大文件存储。最近接触到一个轻量的分布式文件系统--FastDFS,是由国人开发,比较遗憾的是关于FastDFS的文档都比较零散,在这个站点上要稍微集中一些。本文将对FastDFS进行一番探究实践。
FastDFS特性FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及...阅读全文

MySQL InnoDB存储引擎(五):表空间

作者:JerryXia | 发表于 , 阅读 (0)
增加InnoDB系统表空间大小增加InnoDB系统表空间大小的最简单方法就是初始化配置为自动扩展(autoextend)。 在表空间定义中为最后一个数据文件指定autoextend属性,这样InnoDB在空间不足时以64MB的增量自动增加该文件的大小。 可以通过设置innodb_autoextend_increment系统变量的值来更改增量大小(单位为MB)。为了扩展系统表空间,开发人员可通过添加新的数据文件:
关闭数据库;若之前使用了autoextend,可以将其替换为明确的数据文件名及文件大小,如:innodb_data_home_dir =# beforeinnodb_data_file_path = /ibdata/ibdata1:988M:autoextend# afterinnodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend启动数据库。减小InnoDB系统表空间大小在InnoDB中,开发人员并不能直接从系统表空间中删除数据文件,为了减小系统表空间,可以执行如下操作:
使用mys...阅读全文

MySQL InnoDB存储引擎(三):锁及事务模型

作者:JerryXia | 发表于 , 阅读 (0)
2016 年 09 月 10 日mysql对于开发人员而言,对于锁和事务不会陌生。为了避免多线程同时读写共享数据发生竞争的问题,因此,锁是一种比较常用的方式。而事务的定义,主要体现在其基本特性:原子性,一致性,隔离性,持久性。之前的一篇文章有所提到过。但我相信很多开发人员对事务和锁的理解是不够深入的,包括我自己,始终觉得好像很容易回答,又答不出所以然,平常也应该有人问某条SQL会加什么锁呢,为什么我在方法上加了@Transactional就发生死锁了呢?本文将阐述InnoDB存储引擎中的锁及事务模型相关的细节,希望能帮助开发人员了解InnoDB如何有效处理并发事务等机制。
InnoDB锁(InnoDB Locking)在InnoDB中有多种类型的锁,分别适用于不同的场景,如共享/排它锁,意向锁,记录锁等,下面将逐一对其进行阐述。
共享/排它锁(Shared and Exclusive Locks)InnoDB实现了两种类型的标准行级锁:共享锁(S)和排它锁(X)。下面分别阐述其作用及区别:
共享锁(S):允许持有该锁的事务读取某一行记录。持有共享锁的事务允许其他事务读取该行记录,...阅读全文