您的位置:首页 > 其它

YDB 数据类型与表级异构存储

2018-03-06 15:36 316 查看
总所周知,企业级的固态硬盘(SSD)价格数倍于机械硬盘,一般高达 10:1 。为了追求性价比,我们会对数据区别对待,只将对性能影响最大的数据存储在固态硬盘上。为了实现这个功能,YDB 提供了表级的异构存储。

YDB 表级异构存储本质上就是为数据表底层文件扩展名指定不同的存储策略,即部分扩展名文件存储在固态硬盘,其他扩展名文件存储在机械硬盘。而数据表底层文件扩展名是由 Lucene 引擎决定的,与数据类型紧密相关。如果了解 Lucene 索引机制,就可以根据需要设置扩展名的存储策略。

但对像我这样的 Lucene 小白如何选取存储策略?这里通过实验获得了不同类型数据对应不同扩展名的存储空间大小,结合 YDB 数据类型的应用场景,试图定性的分析各“功能”占用的存储位置,为存储策略的选取提供参考。

实验设计

数据表底层文件扩展名及其大小与数据类型紧密相关,因此采用一个表只含有一个字段的方式,测试各数据类型与文件扩展名的关系。

数据类型选取数值型、字符型和分词型,其中每种类型还对应存储方式。具体的选取类型见下表:

No.数据类型存储方式说明
1y_long_i仅索引整形 64 位,范围查找性能低
2y_long_d仅列存同上
3y_long_s仅行存同上
4y_tlong_i仅索引整形 64 位, 适合大范围的 range 过滤查询
5y_tlong_d仅列存同上
6y_tlong_s仅行存同上
7y_string_i仅索引字符串类型,不分词
8y_string_d仅列存同上
9y_string_s仅行存同上
10y_ydblikebig_ip仅索引全文检索, 可以在 like 中进行顺序匹配
11y_ydblikebig_sp仅行存同上
12y_ydbtextbig_i仅索引全文检索, 不能在 like 中进行顺序匹配
13y_ydbtextbig_s仅索引同上
每个数据类型建两个表,一个为低维值列(10个),一个为高维值列(1,000个),每个表的总行数为100,000行。低维值列的伪造方法是,先生成10个不同的单元值样本,随机选取插入表中,样本见下表。高纬值列伪造方法相似。

No.数值型字符型 或 分词型
1436491qoackxqvyxlpktmd
2312602nddaisljiccnljlx
3789688dayarjmyxbwyesst
4958174yfvxrurjouygivho
5941345xayueotawerprlfe
6931928rxeeinbwyyjjikyc
7101295xrrpynhpnmhmwiop
8222082hgmyljmdwighigyy
9503768ermjyacynuxivhtn
10517582pywlksuwipnbfeby

结果及分析

实测的表名与文件扩展名大小(字节)关系见下表,表名中low代表低维值列,high代表高维值列,表名后半部分代表字段类型。

table_namesegsifnmfdxfdtdvmdvddoctiptimposskp
t_low_y_long_i13651487918465617993093760598860195575--
t_low_y_long_d13651488119445619434218760818150171350--
t_low_y_long_s136514808194410023153093760518150171350--
t_low_y_tlong_i136514879116256454630937605273619195902--
t_low_y_tlong_d13651488118465618274218760818150171350--
t_low_y_tlong_s136514808194410022863093760518150171350--
t_low_y_string_i13651487918465618473093760598780195635--
t_low_y_string_d13651488118465618493728776818150171350--
t_low_y_string_s136514808126010195063093760518150171350--
t_low_y_ydblikebig_ip14044252435551411930937605135366518939083989291162
t_low_y_ydblikebig_sp136514808194410202023093760518150171350--
t_low_y_ydbtextbig_i13651487918465626833093760513878172122973--
t_low_y_ydbtextbig_s136514808126010202273093760518150171350--
t_high_y_long_i1365148791846562630309376052059353067554--
t_high_y_long_d136514881184656258134828760818150171350--
t_high_y_long_s136514808126012664553093760518150171350--
t_high_y_tlong_i13651487918465628023093760549741749212829--
t_high_y_tlong_d136514881184656257134828760818150171350--
t_high_y_tlong_s136514808194412663033093760518150171350--
t_high_y_string_i13651487918465626353093760520591443319673--
t_high_y_string_d136514881184656270937320360818150171350--
t_high_y_string_s136514808135824463933093760518150171350--
t_high_y_ydblikebig_ip1404425243375135743093760531660251316205621153059820331
t_high_y_ydblikebig_sp136514808214024463523093760518150171350--
t_high_y_ydbtextbig_i1404355243375135963093760530721641264173662-17525
t_high_y_ydbtextbig_s136514808214024462883093760518150171350--
从高维值列的统计信息中,可以明显看到行存、列存、索引和偏移量对应底层文件的扩展名:

“行存”: 数据主要存储在扩展名为 fdt 的文件中

“列存”: 数据主要存储在扩展名为 dvd 的文件中

“索引”: 数据主要存储在扩展名为 doc 和 tim 的文件中

分词类型中的“索引”:数据还会额外占用扩展名为 skp 的文件

分词类型中带“偏移量”的“索引”:数据还会额外占用扩展名为 pos 的文件

对比高维值列和低维值列,可以看出:

“行存”:列的维值对数据大小影响不大

“列存”:列的维值对数据大小影响较大,低维值列占用空间较少

“索引”:列的维值对数据大小影响较大,低维值列占用空间较少

“pos”:列的维值对数据大小影响较大,低维值列占用空间较少

“skp”:列的维值对数据大小影响较大,低维值列时可以不需要该文件

总结

本文测试了各数据类型与数据表底层文件的对应关系,分析行存、列存、索引和偏移量对应底层文件的扩展名,并简述了列维值对文件大小的影响,为表级异构存储策略的选取提供参考。

如果进一步阅读《YDB编程指南全解》可以了解数据类型及行存、列存、索引和偏移量在数据库查询中的作用。

公司: 沈阳延云云计算技术有限公司

官网: http://ycloud.net.cn

电话:400-188-4800

QQ群: 521648211
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息