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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值