lealone / Lealone-Docs

与 Lealone 相关的所有文档
Other
82 stars 24 forks source link

如何建一张列式存储引擎的表 #9

Closed wangzihaogithub closed 2 years ago

wangzihaogithub commented 2 years ago

有几小问题,想请教一下作者,辛苦解答, 万分感激。

疑问1. 如何建一张列式存储引擎的表? 疑问2. 存储引擎的用户配置和选项有哪些? 疑问3. 想了解下PageStorageMode类里的 ROW_STORAGE,COLUMN_STORAGE的大概的执行流程和逻辑规则是什么? 疑问4. 想了解下,一张表120w行,6个字断,平均每行数据90Byte的表。执行下面的sql效果会不会比mysql表现要好?

select count(DISTINCT u_id), left(create_time,10) from table where create_time > #{begin} and create_time < #{end} group by left(create_time,10)

wangzihaogithub commented 2 years ago

没问题了,这样配置就行了

storage_engines:

codefollower commented 2 years ago

create table mytest(f1 int) PARAMETERS (pageStorageMode='COLUMN_STORAGE') 这样也可以。

codefollower commented 2 years ago

存储引擎有几个核心的参数: pageSplitSize: 默认每个 page 最大16kb,超过了就 split cacheSize: 每个 btree 最大缓存 16M compress: 默认是0,不压缩,1 是 LZF 压缩,2 是 DEFLATE 压缩

wangzihaogithub commented 2 years ago

有没有图片看下 btreeStorage调用COLUMN_STORAGE的流程图

wangzihaogithub commented 2 years ago

还有COLUMN_STORAGE的数据结构

wangzihaogithub commented 2 years ago

还有个疑问,session线程接到sql后,只能单线程计算吗?

codefollower commented 2 years ago

有没有图片看下 btreeStorage调用COLUMN_STORAGE的流程图

在 org.lealone.storage.aose.btree.page.LeafPage.writeColumnStorage 先打个断点, 然后 insert 一些记录,最后执行一下 checkpoint 语句就会把内存中的数据用列存的方式刷到硬盘。

还有个疑问,session线程接到sql后,只能单线程计算吗?

执行 sql 目前不支持并行查询。

wangzihaogithub commented 2 years ago

感谢, 其实想问的是,btree怎么存储列存储,我理解列存储不应该是kv的那种吗?

codefollower commented 2 years ago

lealone btree 采用的是 page 粒度的行列混合存储,跟常见的列存储是不一样的。 page 粒度的列存储的意思是: 如果有1万行记录,每个 page 按先后顺序各存1000行记录,但是每个 page 里面的1000行记录是按列的格式布局。

wangzihaogithub commented 2 years ago

先后顺序是插入的先后顺序吗? 还是fn(1000个主键)的排序?

wangzihaogithub commented 2 years ago

你看我这样理解对不?

每个page 有1000条记录,kv格式存储。 btree的生成是依据的主键落到page上的

codefollower commented 2 years ago

如果表没有主键或虽然有主键但是不能转换成 long 类型的主键就是插入的先后顺序, 如果有能转换成 long 类型的主键就是对主键排序后的顺序。

wangzihaogithub commented 2 years ago

明白了 感谢感谢