0
点赞
收藏
分享

微信扫一扫

GBASE 8s 存储详解_数据类型_02_smallint

建库,建表,插入数据

启动dbaccess

dbaccess - -

建库,建表,插入数据:

drop database if exists dbtype ;

create database dbtype with log;

create table t_smallint(c1 smallint) in dbs1;

insert into t_smallint values(-32767);

insert into t_smallint values(0);

insert into t_smallint values(32767);

insert into t_smallint values(NULL);

数据的选择是:最小值,中间值,最大值,空值。

找到数据的rowid

> select c1, rowid from t_smallint;

    c1       rowid

-32767         257

     0         258

 32767         259

               260

4 row(s) retrieved.

找到数据的物理位置

通过oncheck命令,可以根据库名,表名,rowid,找到数据的物理位置。

该命令会打印该rowid 所在的页的所有row 信息。

[root@localhost ids]# oncheck -pp dbtype:t_smallint 257

addr             stamp    chksum nslots flag type         frptr frcnt next     prev

14:54            5997076  8277   4      1    DATA         32    1996  0        0       

        slot ptr   len   flg

        1    24    2     0  

        2    26    2     0  

        3    28    2     0  

        4    30    2     0  

slot   1:

    0: 80  1                                             ................

slot   2:

    0:  0  0                                             ................

slot   3:

    0: 7f ff                                             ................

slot   4:

    0: 80  0                                             ................

14:54的含义是第14个chunk的54页。

查看数据文件

确保数据落地

强制执行一次检查点,可以确保刚才插入的数据落地。

[root@localhost ids]# onmode –c

打开文件

用16进制的方式,打开数据文件

vi /home/ids/storage/dbs1

%!xxd

根据数据所在的地址 14:54计算出数据所在的位置:

查看slot

2048*54 = 0x1b000,也就是关心的数据从0x1b000开始的,

先从slot看起。

这个页的页尾:

001b7e0: 0000 0000 0000 0000 0000 0000 1e00 0200  ................

001b7f0: 1c00 0200 1a00 0200 1800 0200 1482 5b00  ..............[.

其中一个slot指向一行数据,一个slot占用4个字节,如上图,1800 0200是第一个slot,指向第一行数据,含义是:从0x18字节开始,长度是0x02字节。

以此类推,1a00 0200 指向第二行1c00 0200指向第三行1e00 0200指向第四行

查看数据

根据slot指向的位置,查看数据,如下:

001b000: 3600 0000 0e00 7782 0400 0108 2000 cc07  6.....w..... ...

001b010: 0000 0000 0000 0000 8001 0000 7fff 8000  ................

001b020: 0000 0000 0000 0000 0000 0000 0000 0000  ................

第一行数据:-32767, 就是图中的8001

第二行数据:0,就是图中的0000

第三行数据:32767,就是图中的7fff

第四行数据:NULL,就是图中的8000.

我们看到数据库中的smallint和 c语言中的short(2字节整数)的值域基本一致,区别在于:

gbase8s中的smallint

c语言中的short

值域

-32767 ~ 32767

-32768~32767

空值

有,用-32768表示

举报

相关推荐

0 条评论