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

建库,建表,插入数据

启动dbaccess

dbaccess - -

建库,建表,插入数据:

drop database if exists dbtype ;

create database dbtype with log;

create table t_int(c1 int) in dbs1;

insert into t_int values((-1)*(pow(2,31)-1));

insert into t_int values(0);

insert into t_int values(pow(2,31)-1);

insert into t_int values(NULL);

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

找到数据的rowid

> select c1,rowid from t_int;

         c1       rowid

-2147483647         257

          0         258

 2147483647         259

                    260

4 row(s) retrieved.

找到数据的物理位置

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

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

addr             stamp    chksum nslots flag type         frptr frcnt next     prev

14:54            6158089  f76c   4      1    DATA         40    1988  0        0       

        slot ptr   len   flg

        1    24    4     0  

        2    28    4     0  

        3    32    4     0  

        4    36    4     0  

slot   1:

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

slot   2:

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

slot   3:

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

slot   4:

    0: 80  0  0  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 2400 0400  ............$...

001b7f0: 2000 0400 1c00 0400 1800 0400 09f7 5d00   .............].

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

以此类推,1c00 0400指向第二行2000 0400指向第三行2400 0400指向第四行

查看数据

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

001b000: 3600 0000 0e00 6cf7 0400 0108 2800 c407  6.....l.....(...

001b010: 0000 0000 0000 0000 8000 0001 0000 0000  ................

001b020: 7fff ffff 8000 0000 0000 0000 0000 0000  ................

第一行数据:-2147483647, 就是图中的8000 0001

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

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

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

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

gbase8s中的int

c语言中的short

值域

-1*(pow(2,31)-1) ~ pow(2,31) - 1

-1*pow(2,31) ~pow(2,31) – 1

空值

有,用-1*pow(2,31) 表示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

八珍豆腐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值