h2database
文章平均质量分 82
龚厂长
这个作者很懒,什么都没留下…
展开
-
h2database源码解析-如何更新一条行记录
这里的更新包括两种操作:删、改。更新操作涉及的内容在其他文章里面已经做过介绍了,本文主要是介绍更新的代码流程,以了解更新操作都做了哪些事情。如果有未介绍过的知识点会详细介绍。原创 2023-02-12 12:00:00 · 811 阅读 · 0 评论 -
h2database源码解析-表和索引
如果表的主键索引有多个字段或者不是数字类型的,那么尽管定义了主键索引,h2也是把它当做二级索引使用,因此也是创建一个MVSecondaryIndex对象,只不过这种MVSecondaryIndex对象的名字叫做“PRIMARY_KEY_X”(最后的X表示序号),表示这是某个表的主键索引。它的使用场景比较简单,如果表定义了主键索引,索引中字段只有一个,并且是数字类型的,那么h2会再创建一个MVDelegateIndex对象,该对象有一个属性mainIndex指向了MVPrimaryIndex对象。原创 2023-02-11 13:38:31 · 1744 阅读 · 1 评论 -
h2database源码解析-查询优化器原理
order by子句里面可以指定字段的排序规则,是ASC还是DESC,对于可以为NULL的字段,还有两种排序规则,分别是无论升序还是降序NULL值始终在最前以及无论升序还是降序NULL值始终在最后的排序规则,在h2中使用常量ASCENDING(0)、DESCENDING(1)、NULLS_FIRST(2)、NULLS_LAST(4)表示上述四种排序规则,不过后面两种不能在SQL语句中指定,h2会基于系统默认值设定,默认情况下,升序是NULL值始终在前,降序是NULL值始终在最后。原创 2023-02-11 10:33:26 · 1093 阅读 · 0 评论 -
h2database源码解析-将B+树刷新到磁盘
h2的表、索引、undo log都是使用B+树存储的,这些数据存储到B+树上之后,需要将树从内存再刷新到磁盘上。因为树刷新到磁盘,涉及到磁盘的随机访问,所以一般的数据库实现上,都是有一个后台线程以一定的频率将脏页面刷新到磁盘上。h2也是这么实现的,它是借助于BackgroundWriterThread后台线程完成脏页面的刷新。原创 2023-02-05 15:25:53 · 900 阅读 · 0 评论 -
h2database源码解析-如何将undo log插入到B树
在文章《》中介绍了一条数据如何插入到B树,里面对undo log的构建进行了介绍,本文将介绍undo log构建好之后如何插入到B+树。原创 2023-02-04 22:16:50 · 843 阅读 · 0 评论 -
h2database源码解析-如何插入一条行记录
在h2中,多个不同时运行的事务的undo log可能会存储在同一个B树上,比如,在时刻M,同时运行了三个事务T1,T2,T3,那么T1,T2,T3的undo log分别存储在不同的undo log树上,而且它们的undo logId都是从0开始的 ,时刻M+1上述三个事务都执行完成,在时刻M+2运行了事务T4,那么事务T4的undo log和事务T1的undo log可能会存储在同一个B树上。上面的内容是将行记录插入到表里面的操作,接下来介绍事务提交的时候,h2都做了哪些动作。原创 2023-02-03 23:06:24 · 981 阅读 · 0 评论