返回首页

gbase数据、南大通用产品文档:GBase8a表级、列级的缓存装载与释放

更新日期:2024年09月11日

为了提高查询性能,
GBase 8a MPP Cluster 提供了将数据直接加载到内存中的管理
功能,
用户可以将频繁使用的整张表的全部数据或者指定列的数据加载到内存中,
并且在内存中一直保存加载的数据,这样可以减少I/O 操作,实现直接从内存中
访问表数据,提高查询性能的目的。对于集群产品来说,缓存的装载与释放,都
在gnode 层体现。
对于表级、
列级缓存的装载与释放,
主要会涉及到缓存中的两种状态,
即LOCKED
状态和KEEP 状态。

LOCKED 状态DC:
正在被其它线程或算子访问的DC,
访问DC 时要首先对
DC 加锁(LOCK),访问完成再解锁(UNLOCK)。

KEEP 状态DC:
对于访问频繁的表,
为提高访问效率,
通过ALTER TABLE …
CACHE 命令将表中的全部数据(或某列的数据)装载到缓存中,当内存不
足时,不允许对这些DC 进行缓存交换,KEEP 状态的DC 只能通过ALTER
TABLE …NOCACHE 命令进行释放。
KEEP 状态会使数据常驻内存,
减少磁
盘I/O 操作。
对于用户而言,我们建议一般装载表数据占用的内存的空间不要超过可用物理内
存空间的50%。

GBASE_FIELD
 结构说明
该结构用来保存字段的信息(字段名、类型、大小)
。通过重复调用



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 5 -
gbase_fetch_field()可以为每个字段获取GBASE_FIELD 结构。
 结构成员
名 称
类 型
描 述
name
char*
字段名称,由NULL 终结的字符串。如
果用AS 子句为该字段指定了别名,名
称的值也是别名。
org_name
char*
字段名称,由NULL 终结的字符串。忽
略别名。
table
char*
包含该字段的表的名称,如果该字段不
是计算出的字段的话。对于计算出的字
段,表值为空的字符串。如果用AS 子
句为该表指定了别名,表的值也是别
名。
org_table
char*
表的名称,由NULL 终结的字符串。忽
略别名。
db
char*
字段源自的数据的名称,由NULL 终结
的字符串。如果该字段是计算出的字
段,db 为空的字符串。
catalog
char*
catalog 名称。该值总是"def"。
def
char*
该字段的默认值,由NULL 终结的字符
串。仅当使用GBASE_list_fields()时
才设置它。
length
unsigned
long
字段的宽度,如表定义中所指定的那
样。
max_length
unsigned
long
用于结果集的字段的最大宽度(对于实
际位于结果集中的行,最长字段值的长
度)
。如果使用gbase_store_result()
或gbase_list_fields(),它将包含字
段的最大长度。如果使用
gbase_use_result(),该变量的值为0。

name_length
unsigned
int 名称的长度。

GBase 8a 程序员手册C API 篇


- 6 -

南大通用数据技术股份有限公司
名 称
类 型
描 述
org_name_length
unsigned
int org_name 的长度。
table_length
unsigned
int 表的长度。
org_table_length unsigned
int org_table 的长度。
db_length
unsigned
int db 的长度。
catalog_length
unsigned
int catalog 的长度。
def_length
unsigned
int def 的长度。
flags
unsigned
int 用于字段的不同“位标志”。
decimals
unsigned
int 用于数值字段的十进制数数目。
charsetnr
unsigned
int 用于字段的字符集编号。
type
enum_field_
types
字段的类型。类型值可以是下标所列的
GBASE_TYPE_符号之一:

flags 字段值集合
标志值
标志描述
NOT_NULL_FLAG
字段不能为NULL
PRI_KEY_FLAG
字段是主键的组成部分
UNIQUE_KEY_FLAG
字段是唯一键的组成部分
MULTIPLE_KEY_FLAG
字段是非唯一键的组成部分
UNSIGNED_FLAG
字段具有UNSIGNED 属性
ZEROFILL_FLAG
字段具有ZEROFILL 属性
BINARY_FLAG
字段具有BINARY 属性
AUTO_INCREMENT_FLAG
字段具有AUTO_INCREMENT 属性
ENUM_FLAG
字段是ENUM(不再重视)
SET_FLAG
字段是 SET(不再重视)
BLOB_FLAG
字段是BLOB 或TEXT(不再重视)
TIMESTAMP_FLAG
字段是TIMESTAMP(不再重视)
标志值的典型用法:
if (field->flags & NOT_NULL_FLAG)
printf("Field can't be null\n");
可以使用下述方面的宏来定义标志值的布尔状态:



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 7 -
标志状态
描 述
IS_NOT_NULL(flags) 如果该字段定义为NOT NULL,为“真”。
IS_PRI_KEY(flags)
如果该字段是主键,为“真”。
IS_BLOB(flags)
如果该字段是BLOB 或TEXT,
为“真”
(不再重视,
用测试field->type 取而代之)


type 字段值集合
类型值
类型描述
GBASE_TYPE_TINY
TINYINT 字段
GBASE_TYPE_SHORT
SMALLINT 字段
GBASE_TYPE_LONG
INTEGER 字段
GBASE_TYPE_INT24
MEDIUMINT 字段
GBASE_TYPE_LONGLONG
BIGINT 字段
GBASE_TYPE_DECIMAL
DECIMAL 或NUMERIC 字段
GBASE_TYPE_NEWDECIMAL
精度数DECIMAL 或NUMERIC
GBASE_TYPE_FLOAT
FLOAT 字段
GBASE_TYPE_DOUBLE
DOUBLE 或REAL 字段
GBASE_TYPE_BIT
BIT 字段
GBASE_TYPE_TIMESTAMP
TIMESTAMP 字段
GBASE_TYPE_DATE
DATE 字段
GBASE_TYPE_TIME
TIME 字段
GBASE_TYPE_DATETIME
DATETIME 字段
GBASE_TYPE_YEAR
YEAR 字段
GBASE_TYPE_STRING
CHAR 字段
GBASE_TYPE_VAR_STRING
VARCHAR 字段
GBASE_TYPE_BLOB
BLOB 或TEXT 字段(使用max_length 来确
定最大长度)
GBASE_TYPE_SET
SET 字段
GBASE_TYPE_ENUM
ENUM 字段
GBASE_TYPE_GEOMETRY
Spatial 字段
GBASE_TYPE_NULL
NULL-type 字段
GBASE_TYPE_CHAR
不再重视,用GBASE_TYPE_TINY 取代

GBase 8a 程序员手册C API 篇


- 8 -

南大通用数据技术股份有限公司

GlassFish 配置JNDI
本小节介绍GlassFish v2.1.1 如何通过JNDI 配置连接池。

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 93 -
准备工作:首先把驱动程序
gbase-connector-java-8.3.81.51-build1.0-bin.jar 拷贝到glassfish 的安
装目录/domains/domain1/lib/ext 下。
约定:
1、 方框表示需要注意的地方
2、 椭圆表示鼠标单击