YDB 数据类型与表级异构存储
2018-03-06 15:36
316 查看
总所周知,企业级的固态硬盘(SSD)价格数倍于机械硬盘,一般高达 10:1 。为了追求性价比,我们会对数据区别对待,只将对性能影响最大的数据存储在固态硬盘上。为了实现这个功能,YDB 提供了表级的异构存储。
YDB 表级异构存储本质上就是为数据表底层文件扩展名指定不同的存储策略,即部分扩展名文件存储在固态硬盘,其他扩展名文件存储在机械硬盘。而数据表底层文件扩展名是由 Lucene 引擎决定的,与数据类型紧密相关。如果了解 Lucene 索引机制,就可以根据需要设置扩展名的存储策略。
但对像我这样的 Lucene 小白如何选取存储策略?这里通过实验获得了不同类型数据对应不同扩展名的存储空间大小,结合 YDB 数据类型的应用场景,试图定性的分析各“功能”占用的存储位置,为存储策略的选取提供参考。
数据类型选取数值型、字符型和分词型,其中每种类型还对应存储方式。具体的选取类型见下表:
每个数据类型建两个表,一个为低维值列(10个),一个为高维值列(1,000个),每个表的总行数为100,000行。低维值列的伪造方法是,先生成10个不同的单元值样本,随机选取插入表中,样本见下表。高纬值列伪造方法相似。
从高维值列的统计信息中,可以明显看到行存、列存、索引和偏移量对应底层文件的扩展名:
“行存”: 数据主要存储在扩展名为 fdt 的文件中
“列存”: 数据主要存储在扩展名为 dvd 的文件中
“索引”: 数据主要存储在扩展名为 doc 和 tim 的文件中
分词类型中的“索引”:数据还会额外占用扩展名为 skp 的文件
分词类型中带“偏移量”的“索引”:数据还会额外占用扩展名为 pos 的文件
对比高维值列和低维值列,可以看出:
“行存”:列的维值对数据大小影响不大
“列存”:列的维值对数据大小影响较大,低维值列占用空间较少
“索引”:列的维值对数据大小影响较大,低维值列占用空间较少
“pos”:列的维值对数据大小影响较大,低维值列占用空间较少
“skp”:列的维值对数据大小影响较大,低维值列时可以不需要该文件
如果进一步阅读《YDB编程指南全解》可以了解数据类型及行存、列存、索引和偏移量在数据库查询中的作用。
公司: 沈阳延云云计算技术有限公司
官网: http://ycloud.net.cn
电话:400-188-4800
QQ群: 521648211
YDB 表级异构存储本质上就是为数据表底层文件扩展名指定不同的存储策略,即部分扩展名文件存储在固态硬盘,其他扩展名文件存储在机械硬盘。而数据表底层文件扩展名是由 Lucene 引擎决定的,与数据类型紧密相关。如果了解 Lucene 索引机制,就可以根据需要设置扩展名的存储策略。
但对像我这样的 Lucene 小白如何选取存储策略?这里通过实验获得了不同类型数据对应不同扩展名的存储空间大小,结合 YDB 数据类型的应用场景,试图定性的分析各“功能”占用的存储位置,为存储策略的选取提供参考。
实验设计
数据表底层文件扩展名及其大小与数据类型紧密相关,因此采用一个表只含有一个字段的方式,测试各数据类型与文件扩展名的关系。数据类型选取数值型、字符型和分词型,其中每种类型还对应存储方式。具体的选取类型见下表:
No. | 数据类型 | 存储方式 | 说明 |
---|---|---|---|
1 | y_long_i | 仅索引 | 整形 64 位,范围查找性能低 |
2 | y_long_d | 仅列存 | 同上 |
3 | y_long_s | 仅行存 | 同上 |
4 | y_tlong_i | 仅索引 | 整形 64 位, 适合大范围的 range 过滤查询 |
5 | y_tlong_d | 仅列存 | 同上 |
6 | y_tlong_s | 仅行存 | 同上 |
7 | y_string_i | 仅索引 | 字符串类型,不分词 |
8 | y_string_d | 仅列存 | 同上 |
9 | y_string_s | 仅行存 | 同上 |
10 | y_ydblikebig_ip | 仅索引 | 全文检索, 可以在 like 中进行顺序匹配 |
11 | y_ydblikebig_sp | 仅行存 | 同上 |
12 | y_ydbtextbig_i | 仅索引 | 全文检索, 不能在 like 中进行顺序匹配 |
13 | y_ydbtextbig_s | 仅索引 | 同上 |
No. | 数值型 | 字符型 或 分词型 |
---|---|---|
1 | 436491 | qoackxqvyxlpktmd |
2 | 312602 | nddaisljiccnljlx |
3 | 789688 | dayarjmyxbwyesst |
4 | 958174 | yfvxrurjouygivho |
5 | 941345 | xayueotawerprlfe |
6 | 931928 | rxeeinbwyyjjikyc |
7 | 101295 | xrrpynhpnmhmwiop |
8 | 222082 | hgmyljmdwighigyy |
9 | 503768 | ermjyacynuxivhtn |
10 | 517582 | pywlksuwipnbfeby |
结果及分析
实测的表名与文件扩展名大小(字节)关系见下表,表名中low代表低维值列,high代表高维值列,表名后半部分代表字段类型。table_name | seg | si | fnm | fdx | fdt | dvm | dvd | doc | tip | tim | pos | skp |
---|---|---|---|---|---|---|---|---|---|---|---|---|
t_low_y_long_i | 136 | 514 | 879 | 1846 | 561799 | 309 | 37605 | 98860 | 195 | 575 | - | - |
t_low_y_long_d | 136 | 514 | 881 | 1944 | 561943 | 421 | 87608 | 18150 | 171 | 350 | - | - |
t_low_y_long_s | 136 | 514 | 808 | 1944 | 1002315 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_low_y_tlong_i | 136 | 514 | 879 | 1162 | 564546 | 309 | 37605 | 273619 | 195 | 902 | - | - |
t_low_y_tlong_d | 136 | 514 | 881 | 1846 | 561827 | 421 | 87608 | 18150 | 171 | 350 | - | - |
t_low_y_tlong_s | 136 | 514 | 808 | 1944 | 1002286 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_low_y_string_i | 136 | 514 | 879 | 1846 | 561847 | 309 | 37605 | 98780 | 195 | 635 | - | - |
t_low_y_string_d | 136 | 514 | 881 | 1846 | 561849 | 372 | 87768 | 18150 | 171 | 350 | - | - |
t_low_y_string_s | 136 | 514 | 808 | 1260 | 1019506 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_low_y_ydblikebig_ip | 140 | 442 | 524 | 355 | 514119 | 309 | 37605 | 1353665 | 189 | 3908 | 39892 | 91162 |
t_low_y_ydblikebig_sp | 136 | 514 | 808 | 1944 | 1020202 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_low_y_ydbtextbig_i | 136 | 514 | 879 | 1846 | 562683 | 309 | 37605 | 1387817 | 212 | 2973 | - | - |
t_low_y_ydbtextbig_s | 136 | 514 | 808 | 1260 | 1020227 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_high_y_long_i | 136 | 514 | 879 | 1846 | 562630 | 309 | 37605 | 205935 | 306 | 7554 | - | - |
t_high_y_long_d | 136 | 514 | 881 | 1846 | 562581 | 348 | 287608 | 18150 | 171 | 350 | - | - |
t_high_y_long_s | 136 | 514 | 808 | 1260 | 1266455 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_high_y_tlong_i | 136 | 514 | 879 | 1846 | 562802 | 309 | 37605 | 497417 | 492 | 12829 | - | - |
t_high_y_tlong_d | 136 | 514 | 881 | 1846 | 562571 | 348 | 287608 | 18150 | 171 | 350 | - | - |
t_high_y_tlong_s | 136 | 514 | 808 | 1944 | 1266303 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_high_y_string_i | 136 | 514 | 879 | 1846 | 562635 | 309 | 37605 | 205914 | 433 | 19673 | - | - |
t_high_y_string_d | 136 | 514 | 881 | 1846 | 562709 | 373 | 203608 | 18150 | 171 | 350 | - | - |
t_high_y_string_s | 136 | 514 | 808 | 1358 | 2446393 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_high_y_ydblikebig_ip | 140 | 442 | 524 | 337 | 513574 | 309 | 37605 | 3166025 | 1316 | 205621 | 1530598 | 20331 |
t_high_y_ydblikebig_sp | 136 | 514 | 808 | 2140 | 2446352 | 309 | 37605 | 18150 | 171 | 350 | - | - |
t_high_y_ydbtextbig_i | 140 | 435 | 524 | 337 | 513596 | 309 | 37605 | 3072164 | 1264 | 173662 | - | 17525 |
t_high_y_ydbtextbig_s | 136 | 514 | 808 | 2140 | 2446288 | 309 | 37605 | 18150 | 171 | 350 | - | - |
“行存”: 数据主要存储在扩展名为 fdt 的文件中
“列存”: 数据主要存储在扩展名为 dvd 的文件中
“索引”: 数据主要存储在扩展名为 doc 和 tim 的文件中
分词类型中的“索引”:数据还会额外占用扩展名为 skp 的文件
分词类型中带“偏移量”的“索引”:数据还会额外占用扩展名为 pos 的文件
对比高维值列和低维值列,可以看出:
“行存”:列的维值对数据大小影响不大
“列存”:列的维值对数据大小影响较大,低维值列占用空间较少
“索引”:列的维值对数据大小影响较大,低维值列占用空间较少
“pos”:列的维值对数据大小影响较大,低维值列占用空间较少
“skp”:列的维值对数据大小影响较大,低维值列时可以不需要该文件
总结
本文测试了各数据类型与数据表底层文件的对应关系,分析行存、列存、索引和偏移量对应底层文件的扩展名,并简述了列维值对文件大小的影响,为表级异构存储策略的选取提供参考。如果进一步阅读《YDB编程指南全解》可以了解数据类型及行存、列存、索引和偏移量在数据库查询中的作用。
公司: 沈阳延云云计算技术有限公司
官网: http://ycloud.net.cn
电话:400-188-4800
QQ群: 521648211
相关文章推荐
- Java中基本数据类型的存储方式和相关内存的处理方式
- byte类型数据的取值范围及溢出后的强制转换及在内存中的存储结果
- Android 开发中Parcel存储类型和数据容器
- c\c++数据类型存储
- Java中存储金额用什么数据类型?
- Java中存储金额用什么数据类型
- 数据在内存中的存储之字符类型
- 02:浮点型数据类型存储空间大小
- 实验九——基本数据类型存储及应用总结
- Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)
- JAVA中有关byte,int,long这些基本数据类型的存储方式以及负数在JAVA中的表示方式
- 利用Sqlite数据库的blob类型存储自定义的数据类型
- 转--Oracle 数据类型及存储方式 【B】
- sqlite3中BLOB数据类型存储大对象运用示例
- python 将复杂数据类型(list、dict)存储到文件 以及 读入 pickle模块
- c语言基本数据类型及存储方式
- SQL存储过程-新增和修改,参数Xml数据类型
- 大数据存储平台之异构存储实践
- java中的各种数据类型在内存中存储的方式
- 关于Cocos2d-x中数据的存储提取和类型转换