更新日期:2024年09月11日
GBase 8s ODBC Driver提供可用于检索有关行和集合的函数。
下表提供了 GBase 8s ODBC Driver用于检索行和集合信息的函数概述。
ifx_rc_describe() 函
数返回行或集合中元素的数据类型。
函数
信息
参考
ifx_rc_count()
列数
ifx_rc_count() 函数
ifx_rc_describe() 数据类型信息
ifx_rc_describe() 函数
ifx_rc_isnull()
指示是否为空的值 ifx_rc_isnull() 函数
ifx_rc_typespec() 类型描述
ifx_rc_typespec() 函数
GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 158 -
7 客户端函数
这些主题描述了 GBase 8s ODBC Driver客户端函数。使用这些函数访问和操纵智能大对象
以及行和集合。
仅当您的数据库服务器是 GBase 8s 时,这些函数才适用。
MOT 索引基于最先进的Masstree 的免锁索引,用于多核系统的快速和可扩展的键值
(KV)存储,通过B+树的Trie 实现。在多核服务器和高并发工作负载上,性能优异。它使
用各种先进的技术,如乐观锁方法、缓存感知和内存预取。
在比较了各种最先进的解决方案之后,我们选择了Masstree 作为索引,因为它显示了
点查询、迭代和修改的最佳总体性能。Masstree 是Trie 和B+树的组合,用以谨慎利用缓存、
预取、
乐观导航和细粒度锁定。
它针对高争用进行了优化,
并对其前代产品增加了许多优化,
如OLFIT。然而,Masstree 索引的缺点是它的内存消耗更高。虽然行数据占用相同的内存大
小,但每个索引(主索引或辅助索引)的每行内存平均高了16 字节——基于磁盘的表使用
基于锁的B 树,大小为29 字节,而MOT 的Masstree 大小为45 字节。
我们的实证研究表明,成熟的免锁Masstree 实现与我们对Silo 的强大改进相结合,恰
能为我们解决这一方面的问题。
另一个挑战是对具有多个索引的表使用乐观插入。
Masstree 索引是用于数据和索引管理的MOT 内存布局的核心。我们的团队增强并显著
改进了Masstree,同时提交了一些关键贡献给Masstree 开源。这些改进包括:
每个索引都有专用内存池:高效分配和快速索引下移
Masstree 全球GC:快速按需内存回收
具有插入键访问的大众树迭代器实现
ARM 架构支持
MOT 的主要创新是增强了原有的Masstree 数据结构和算法,它不支持非唯一索引(作
为二级索引)。设计细节请参见非唯一索引。
MOT 支持主索引、
辅助索引和无键索引
(受不支持的索引DDL 和索引中提到的限制)
。
非唯一索引
一个非唯一索引可以包含多个具有相同键的行。
非唯一索引仅用于通过维护频繁使用的
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
492
数据值的排序来提高查询性能。
例如,
数据库可能使用非唯一索引对来自同一家庭的所有人
员进行分组。但是,Masstree 数据结构实现不允许将多个对象映射到同一个键。我们用于创
建非唯一索引的解决方案(如下图所示)
是为映射行的键添加一个打破对称的后缀。这个添
加的后缀是指向行本身的指针,该行具有8 个字节的常量大小,
并且值对该行是唯一的。当
插入到非唯一索引时,哨兵的插入总是成功的,这使执行事务分配的行能够被使用。这种方
法还使MOT 能够为非唯一索引提供一个快速、可靠、基于顺序的迭代器。
图13- 5 非唯一索引
上图描述了一个MOT 的T 表的结构,它有三个行和两个索引。矩形表示数据行,索引
指向指向行的哨兵(椭圆形)。哨兵用键插入唯一索引,用键+后缀插入非唯一索引。哨兵
可以方便维护操作,无需接触索引数据结构就可替换行。此外,
在哨兵中嵌入了各种标志和
参考计数,以便于乐观插入。
查找非唯一辅助索引时,
会使用所需的键
(如姓氏)
。
全串联键只用于插入和删除操作。
插入和删除操作总是将行作为参数获取,
从而可以创建整个键,
并在执行删除或插入索引的
特定行时使用它。