自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 obproxy sql路由模块源码阅读

OBProxy作为OceanBase专用的反向代理服务器,功能非常强大。要学习obproxy,决定从源码开始阅读。首先选择路由模块。

2022-09-20 08:44:48 437

原创 从源码编译安装启动MatrixOne

这一步会下载很多库,如果不翻墙可能会卡住。然后更换go代理,下面两行分别是七牛云和阿里云的代理,可以分别尝试一下。这时可以成功启动,并且控制台里会输出大量的debug日志,可以去修改成error级别,也可以暂时无视他。最近开始学习matrixone,从源码开始编译。官网上有编译流程,感觉非常简单,步骤很少。centos7的干净虚拟机,更换yum源,安装golang这些就不再赘述。这里需要修改cgo目录下的Makefile文件,找到这一行添加-std=c99选项。再次执行成功,全部编译完成。

2022-09-03 10:15:06 383

原创 EsgynDB中的共享内存

假设在第一个进程中,一片共享内存映射到基地址0x10000000处,这片共享内存里有个指针本身的地址为0x10000100, 其指向的地址为0x10000200, 这片共享内存被第二个进程映射到基地址0x2000000处,第二个进程通过偏移0x100可以访问这个指针,但是这个指针指向的仍然是0x10000200,通过指针访问对应内存就会产生不可预知的错误。如果CacheEntry这个类有虚函数,虚函数表编译后是个固定的数据存放在数据区,程序每次运行的时候,会有一个动态绑定的过程。...

2022-08-30 10:18:44 404

原创 EsgynDB如何使用min_max谓词优化hash join

但是在当前场景中,第一张表的数据范围是1-100000,第二张表的数据范围是99000-199000,实际重叠范围仅有1000行左右。如果能够提前判断出这个范围,对t2就不需要进行全表扫描,只扫描1-100000范围内的1000行即可。对第一张表扫描后取出最大和最小值,再将这个最大最小值推到第二张表的scan算子中,进而优化性能。如果再使用explain语句查看详细的执行计划,出现min_max_cols,min_max_hostvars等字段,则说明该优化成功开启。若可以过滤很多数据,则性能提升明显。

2022-08-25 11:48:06 92

原创 EsgynDB如何建立索引

比如上面的例子,按照c2查询,那么就在c2列上建索引,就可以走索引扫描,性能非常好。但是因为只需要访问c2,c3,建立索引时可以通过with table columns(c3)语法将c3列带上,此时索引中包含所有sql语句需要访问的列,则可以直接在索引上完成查询,不需要回表。当等于在前,范围在后时,可以正确产生beginkey和endkey,反之则只有范围条件可以正常生成beginkey和endkey,导致选择性变差,多扫描数据,性能下降,甚至选择性太差时可能无法走到索引扫描。例如如下三条查询语句。...

2022-08-17 17:59:12 370

原创 kudu compaction操作

对于需要大量数据进行快速写入/删除的集群,可以设置更大的值。后台工作线程会一直处于工作状态,当插入操作比较频繁时,会更多时间片用于 MemRowSets 刷写磁盘变为 DiskRowSets,当插入操作比较少时候,会花更多时间片用于 Delta Compaction/RowSet Compaction,以提升长久的读取和插入性能。这个操作本质上不是为了减少文件数量,而是为了对内容进行排序重组,减少不同DRS之间key的overlap(重复),进而在检索的时候减少需要参与检索的DRS的数量。...

2022-08-17 15:59:24 779

原创 kudu scan操作

根据用户查询的timestamp决定在base data的基础上apply redo file或者apply undo file,得到最终数据。Delta数据部分包含REDO与UNDO两部分:这里的REDO与UNDO与关系型数据库中的REDO与UNDO日志不太相同。在关系型数据库中,REDO日志记录了更新后的数据,可以用来恢复尚未写入DataFile的已成功事务更新的数据。READ_YOUR_WRITES 如果客户端A写入了最新的值,那么A的后续操作都会读取到最新值。性能较差,但是出现故障后可以续传。.

2022-08-17 15:36:25 398

原创 kudu update操作

这里同样使用了一段内存作为缓冲,与insert操作的memRowset类似,update操作也是先写入deltaMemStore,然后再定期刷入到deltaFile中。deltaStore中维护的并不是主键索引的b-树,而是基于row_offset的b-树。update操作在baseData中查询主键索引,得到row_offset后,在deltaStore中可以直接通过row_offset去deltaStore中进行写入。kudu的update操作与insert操作类似,一开始需要先查询主键是否存在。...

2022-08-17 15:04:22 787

原创 kudu insert操作流程

访问每个rowset时,先看在不在内部实际最大最小值范围内,如果不在,则直接pass。比如一个rowset范围是12000-13000,则pass,另一个rowset范围是13000-16000,则需要进入下一步。这样做的原因是hbase的一行数据可能会flush到不同的storefile中,因此在扫描一行数据时必须要遍历所有的storefile。而kudu的做法可以保证一行数据一定就在某一个rowset中,找到这个rowset就不用再遍历其他的rowset。至此,是kudu的所有insert操作流程。..

2022-08-16 17:11:11 1004

原创 kudu使用bloom filter来加速join操作

在以上步骤中,3是负载最终的操作,尤其是当工作节点与表的实际存储位置不在同节点上时,还会产生大量的网络IO。这样kudu在读大表时,就自动将不匹配bloom filter的数据过滤掉,不再回传给负责读大表的工作节点。根据kudu自己的测试,在应用了bloom filter来加速hash join之后,在不同场景下有大约3-15倍的性能提升。如果换个场景,比如两张大表的hash join,而且数据比例接近1比1,也就是说淘汰不了太多数据的话,这个优化应该提升不大,甚至有副作用。...

2022-08-16 16:00:08 327

原创 kudu index skip scan优化

Index skip scan可以在缺失主键第一列的情况下,自动补全主键第一列,将全表扫描转换成多次主键扫描。但是显而易见如果主键第一列的取值非常多,反而会导致性能下降。目前kudu中该优化默认开启,并且没有判断主键第一列取值数以决定是否关闭该优化的能力。另外目前只支持=谓词,尚且不支持范围谓词,以及IN谓词。查询条件落在tstamp列上,缺失了主键第一列,所以无法走到主键扫描。但是kudu可以可以根据主键索引得到第一列host的具体值,补全第一列后再进行查询。依次遍历所有host值,得到所有结果。...

2022-08-16 15:28:39 406

原创 关于kudu延迟物化的思考

这样的查询过程就减少了IO数量,提高了性能。C9列是特殊的列,选择性非常好,有一百万个不同的值。但是根据前面延迟物化的步骤,从C9过滤完结果后,又继续去读其他列进行过滤,导致性能反而下降。如下图所示,谓词数量增加后,反而耗时185毫秒,性能明显下降。当过滤出的行低于某个临界值,例如总行数的1%后,可以直接读出这些行的所有列,再执行剩下的谓词即可。由于Kudu是一个典型的列存系统,所以存在一个优化机制叫做延迟物化。在查询时会优先 过滤出谓词中涉及到的列,将符合条件的行筛选出来以后,再决定是否去读取其他列。..

2022-08-16 15:05:20 249

原创 EsgynDB如何选择表分区

EsgynDB如何选择表分区

2022-08-15 17:58:28 276

原创 如何选择aligned format和hbase format(浅谈Esgyndb中的行存与列存)

如何选择aligned format和hbase format(浅谈Esgyndb中的行存与列存)

2022-08-15 14:58:56 180 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除