mysql底层和jpa
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
7 mysql事务(包括redo log,undo log,MVCC)及事务实现原理
之前写了几篇mysql存储原理的文章。6Innodb_buffer_pool5b+ tree和每个page存储结构4innodb文件系统基本结构(段、簇、页面)3innodb文件系统初步入门2表对象缓存1 连接层这一篇终于到事务了,事务大家都知道ACID概念,那么mysql是如何完成事务的呢?先来看结论——原子性:一次事务中的所有操作,要么全部完成...原创 2019-10-22 17:23:32 · 3076 阅读 · 8 评论 -
6 mysql底层解析——缓存,Innodb_buffer_pool,包括连接、解析、缓存、引擎、存储等
前面几篇主要学习存储,在磁盘上的存储结构,内部格式等。这一篇就来看内存,对于Innodb来说,也就是最关键的Innodb_buffer_pool。我们都知道,内存读写和磁盘读写的速度不在一个数量级,在数据库中,数据都是最终落到磁盘上的,想要达成快速的读写,必然要依靠缓存技术。Innodb的这个缓存区就是Innodb_buffer_pool,当读取数据时,就会先从缓存中查看是否数据的页(...原创 2019-09-06 16:36:20 · 5364 阅读 · 7 评论 -
5 mysql底层解析——b+ tree和每个page存储结构,包括连接、解析、缓存、引擎、存储等
上一篇,我们学习了innodb文件系统内部大的存储结构,包括段(segment),簇(extent),页(page)各自的含义。简单回顾一下,段是组成表空间的最大结构,当创建一个表时,会同时创建两个段(内节点段,叶子段),分别管理非叶子节点数据和叶子节点数据。其实还有一个段(回滚段),是存放回滚数据的,只不过回滚段不是放在每个表的表空间,而是放在共享表空间的,希望还能记得共享表空间是什么。...原创 2019-09-04 14:19:18 · 2358 阅读 · 3 评论 -
4 mysql底层解析——innodb文件系统基本结构(段、簇、页面),包括连接、解析、缓存、引擎、存储等
上一篇,我们学习了innodb文件系统的大的框架,知道了innodb文件系统是由一些log和每个表的ibd(16K的整数倍)等文件组成的。那么这些文件,里面是怎么样的呢?表数据文件IBD上一篇我们看到了,当你新建一个库时,首先文件系统上会多一个以库名命名的文件夹。里面有ibd、frm文件,每个表对应一个ibd文件。那么当我们新建库时,innodb做了什么呢?会初始化一个名叫ibda...原创 2019-08-26 17:03:22 · 2380 阅读 · 0 评论 -
3 mysql底层解析——innodb文件系统初步入门,包括连接、解析、缓存、引擎、存储等
上一篇我们学习了server层对于表对象缓存的处理,表对象获取到之后,通过handler才具备了与存储引擎交互的能力。那么存储引擎层又是怎么个流程呢?mysql文件结构这些文件都可以在文件目录中找到,我们来看看都是做什么的。my.cnf,大家都懂。slow.log,记录慢查询日志,当语句执行时间超过参数long_query_time的值时,会被记录到该log,需要开启配置后才有...原创 2019-08-22 17:11:41 · 1588 阅读 · 1 评论 -
2 mysql底层解析——表对象缓存,包括连接、解析、缓存、引擎、存储等
学习了mysql的连接层之后,要来看一下mysql的server层了。这一层聚集了mysql的最多的逻辑,包括了请求解析、查询缓存、语义分析、查询优化、各种计算函数、扫描记录、binlog、缓存、锁、内存管理等等。当一个连接建立起了,用户发过来一个sql语句,从接到这个语句到返回给用户结果,这个过程中,经历了很多事,如果每一步都非常清楚,那么你就能解决大部分的问题。这一篇主要是讲表对象缓存...原创 2019-08-21 17:23:30 · 1668 阅读 · 2 评论 -
1 mysql底层解析——连接层,包括连接、解析、缓存、引擎、存储等
打算写一个系列的文章,主要是mysql底层解析。很多时候,程序员对mysql处于频繁使用,但都一知半解的程度,除了会加个索引,貌似也没啥优化的技能了。事实上,mysql能有今日的成就,必然不是靠个索引就吃饭的。更何况很多情况下,索引什么的应用层面也解决不了实际问题。那么,我们就需要深入到mysql内部去一探究竟。分层架构大多数数据库都是这样的结构,mysql作为一个插件式的数据库,...原创 2019-08-21 15:52:51 · 3545 阅读 · 4 评论 -
SpringBoot 使用sharding jdbc进行分库分表,基于4.0版本,Springboot2.1
之前写过一篇使用sharding-jdbc进行分库分表的文章,https://blog.csdn.net/tianyaleixiaowu/article/details/70242971,当时的版本还比较早,现在已经不能用了。这一篇是基于最新版来写的。新版已经变成了shardingsphere了,https://shardingsphere.apache.org/。有点不同的是,这一篇,我们是...原创 2019-08-01 14:57:07 · 17965 阅读 · 31 评论 -
jpa多数据源时Hibernate配置自动生成表不生效
jpa配置多数据源教程很多,在Springboot2之后有一些变化,来看一下。application.yml如下:spring: application: name: t3cc datasource: primary: jdbc-url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}...原创 2019-07-23 11:30:16 · 5110 阅读 · 9 评论 -
看图了解RocksDB
转载自:https://yq.aliyun.com/articles/669316它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。下图为写入的流程:可以看到主要的三个组成部分,内存结构memtable,类似事务日志角色的WAL文件,持久化的SST文件。数据会放到内存结构memt...转载 2019-07-29 13:04:40 · 1368 阅读 · 0 评论 -
JPA(hibernate)一对多根据多的一方某属性进行过滤查询
我们经常会碰上某个字段是集合元素(List,Set)的情况,并且我们要过滤出集合中包含某个或某些元素的数据。 譬如一个类User /** * 检索人 */ private Long userId; /** * 省、直辖市集合 */ @ElementCollection @CollectionTable pr原创 2017-11-22 12:24:46 · 14769 阅读 · 1 评论 -
详解Jpa动态复杂条件查询,查询指定字段、并包括sum、count、avg等数学运算,包括groupBy分组
Jpa是我一直推荐在Springboot及微服务项目中使用的数据库框架,并由于官方的并不是十分友好和易用的api,导致很多人使用起来并不方便,下面就来展示一下我对api进行了封装后的代码。大大减轻了使用难度。效果展示首先我们直接来看最终的结果:譬如有个entity叫PtActivity,它有一个Repository。public interface PtActivityRepos...原创 2019-05-31 18:39:50 · 28172 阅读 · 18 评论