首页 > 数据库 >GBase 8a的如何拿到行号,rowid,类似oracle的rowid

GBase 8a的如何拿到行号,rowid,类似oracle的rowid

时间:2024-10-25 08:58:23浏览次数:4  
标签:00 rows 8a Elapsed test rowid oracle gbase

本文介绍GBase 8a数据库集群内部,对没一行数据的行号rowid的方案。如Oracle等数据库,提供了rowid来唯一标识一行数据,在GBase里也提供了rowid,但因为是MPP,所以在随机分布表里,每个节点是各自独立的,只有复制表才能保证一致性。

测试环境

2节点集群

[gbase@localhost ~]$ gcadmin
CLUSTER STATE:  ACTIVE
CLUSTER MODE:   NORMAL

=================================================================
|             GBASE COORDINATOR CLUSTER INFORMATION             |
=================================================================
|   NodeName   |     IpAddress     |gcware |gcluster |DataState |
-----------------------------------------------------------------
| coordinator1 |    10.0.2.107     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
| coordinator2 |    10.0.2.106     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
=============================================================
|              GBASE DATA CLUSTER INFORMATION               |
=============================================================
|NodeName |     IpAddress     |gnode |syncserver |DataState |
-------------------------------------------------------------
|  node1  |    10.0.2.107     | OPEN |   OPEN    |    0     |
-------------------------------------------------------------
|  node2  |    10.0.2.106     | OPEN |   OPEN    |    0     |
-------------------------------------------------------------

测试hash分布表的行号rowid

随机表的rowid, 会出现重复的,因为每个数据节点都是从0开始的rowid。

gbase> create table test_rowid(id int, value varchar(100)) distributed by('id');
Query OK, 0 rows affected (Elapsed: 00:00:00.26)

gbase> insert into test_rowid values(1,'111'),(2,'2222'),(3,'3333');
Query OK, 3 rows affected (Elapsed: 00:00:00.16)
Records: 3  Duplicates: 0  Warnings: 0

gbase> insert into test_rowid values(4,'444'),(5,'555'),(6,'666');
Query OK, 3 rows affected (Elapsed: 00:00:00.21)
Records: 3  Duplicates: 0  Warnings: 0

gbase> insert into test_rowid values(7,'777'),(8,'888'),(9,'999');
Query OK, 3 rows affected (Elapsed: 00:00:00.13)
Records: 3  Duplicates: 0  Warnings: 0

gbase> select rowid,t.* from test_rowid t;
+-------+------+-------+
| rowid | id   | value |
+-------+------+-------+
|     0 |    1 | 111   |
|     1 |    2 | 2222  |
|     2 |    3 | 3333  |
|     3 |    4 | 444   |
|     4 |    5 | 555   |
|     0 |    6 | 666   |
|     1 |    7 | 777   |
|     2 |    8 | 888   |
|     3 |    9 | 999   |
+-------+------+-------+
9 rows in set (Elapsed: 00:00:00.00)

gbase> ^CAborted

测试随机分布表行号rowid

依然会出现重复的行号rowid

[gbase@localhost ~]$ cat test_rowid.txt
11,1111111
22,22222222
33,333333333
44,44444444
55,555555555
66,666666666
77,7777777777
88,8888888888
[gbase@localhost ~]$

gbase> create table test_rowid_2(id int, value varchar(100));
Query OK, 0 rows affected (Elapsed: 00:00:00.27)

gbase> load data infile 'sftp://gbase:[email protected]//home/gbase/test_rowid.txt' into table test_rowid_2 fields terminated by ',';
Query OK, 8 rows affected (Elapsed: 00:00:00.98)
Task 1835164 finished, Loaded 8 records, Skipped 0 records

gbase> select rowid,t.* from test_rowid_2 t;
+-------+------+------------+
| rowid | id   | value      |
+-------+------+------------+
|     0 |   11 | 1111111    |
|     1 |   33 | 333333333  |
|     2 |   55 | 555555555  |
|     3 |   77 | 7777777777 |
|     0 |   22 | 22222222   |
|     1 |   44 | 44444444   |
|     2 |   66 | 666666666  |
|     3 |   88 | 8888888888 |
+-------+------+------------+
8 rows in set (Elapsed: 00:00:00.01)


测试复制表行号rowid

因为复制表,每个节点数据都一样,所以行号rowid是唯一的。


gbase> create table test_rowid_r(id int, value varchar(100)) replicated;
Query OK, 0 rows affected (Elapsed: 00:00:00.17)

gbase> load data infile 'sftp://gbase:[email protected]//home/gbase/test_rowid.txt' into table test_rowid_r fields terminated by ',';
Query OK, 8 rows affected (Elapsed: 00:00:00.90)
Task 1835166 finished, Loaded 8 records, Skipped 0 records

gbase> select rowid,t.* from test_rowid_r t;
+-------+------+------------+
| rowid | id   | value      |
+-------+------+------------+
|     0 |   11 | 1111111    |
|     1 |   22 | 22222222   |
|     2 |   33 | 333333333  |
|     3 |   44 | 44444444   |
|     4 |   55 | 555555555  |
|     5 |   66 | 666666666  |
|     6 |   77 | 7777777777 |
|     7 |   88 | 8888888888 |
+-------+------+------------+
8 rows in set (Elapsed: 00:00:00.01)

结论

在当前已经发行的版本,由于行号rowid是依赖数据节点本身的,所以集群层并没有统一的一个行号,所以如果需要行号,可以用复制表。

从业务上,还是希望用户自行管理类似功能,比如新的V9版本支持了自增列,不要依赖行号。

标签:00,rows,8a,Elapsed,test,rowid,oracle,gbase
From: https://www.cnblogs.com/gdjgs/p/18501724

相关文章

  • Oracle的用户如何优雅地达成软件合规目标
    企业一旦发展到了一定规模,就会衍生软件100%合规正版化的需求。而对于使用到Oracle的用户,当然,具体核定的购买数量和off等商务问题,需要客户管理层直接和对应的Oracle销售代表进行商务谈判。理想情况下,一旦用户面临这个场景,就需要安排自己的技术负责人提前梳理清楚公司目前到底都......
  • Oracle 排序
    在Oracle中,使用ORDERBY语法按字符串进行排序ASC或DESC关键字:指定升序或降序排序,默认情况下,排序是升序的。NULLSFIRST或NULLSLAST关键字:指定对空值的处理方式,默认情况下,空值排在最后。--按升序排序,空值排在最后SELECTcolumn_nameFROMtable_nameORDERBYcolumn_na......
  • Oracle+11g+笔记(8)-备份与恢复机制
    Oracle+11g+笔记(8)-备份与恢复机制8、备份与恢复机制8.1备份与恢复的方法数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件,也可能是某一部分数据。在数据库正常运行时,就应该考虑到数据库可能出现故障,而对数据库实施有效的备份,保证......
  • nbu下oracle11g异机迁移
    操作系统:centos7.6oracle版本:11.2.0.4一、源数据库操作1.源库备份情况:查看nbu备份文件/usr/openv/netbackup/bin/bplist-Cbomdb-SNBU-server-t4-R-l/ 2.创建pfile文件并传递到目标库createpfile='/home/oracle/initbom.ora'fromspfile;scp-rinitbom.o......
  • Oracle 12C 一步一步安装大全避免踩坑(精华)
    Centos7安装oracle12c杂记参考https://blog.csdn.net/liu918458630/article/details/107531253https://blog.51cto.com/gblfy/5656598在CentOS7上挂载光盘并配置YUM源通常是为了在没有互联网连接的情况下安装软件包。以下是步骤:步骤1:挂载光盘首先,你需要将C......
  • 【磐维数据库】Oracle(透明网关)访问磐维数据库(PanWeiDB)
    磐维数据库(PanWeiDB)是由中国移动基于中国本土开源数据库openGauss打造的自研数据库产品,主要面向ICT基础设施。它具有高性能、高可靠性、高安全性和高兼容性的特点,能够支持集中式、分布式、云原生、一体机等多种应用场景。目前,磐维数据库已在中国移动的多个省(区、市)公司及专业公司......
  • Oracle认证证书的考试费用是多少
    近期有学员咨询时问到:他大学学的是it和计算机方面的课程,在投简历时经常会看到Oracle认证优先,所以来问问Oracle证书的事情。新接触数据库行业的毕业生或者转行的人可能不清楚Oracle认证的含金量,Oracle是非常有名的数据库产品,在db-ranking统计中,Oracle数据库一直霸占第一的位置,Orac......
  • Oracle Spatial详解(空间数据库)
    OracleSpatial详解(空间数据库)完全转自:http://www.cnblogs.com/frogbag/archive/2007/10/17/926870.html Step1.创建一张表,其中shape用来存放空间数据 CREATETABLEmylake(   feature_idNUMBERPRIMARYKEY,   nameVARCHAR2(32),    shapeMDSYS.SDO_G......
  • Oracle Spatial基础
    OracleSpatial基础完全转自:http://blog.sina.com.cn/s/blog_439d2cef01009c4a.html 一、OracleSpatial简介    Oracle支持自定义的数据类型,可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来......
  • Oracle-Spatial空间数据库基础
    Oracle-Spatial空间数据库基础完全转自:https://blog.csdn.net/wyp_666/article/details/72775714一、简介 oraclespatial是oracle公司推出的空间数据库组件,使oracle具备处理空间数据的能力。从9i开始对空间数据提供了比较完备的支持。OracleSpatial主要通过元数据表、空间......