返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

51.2. 扩展性

发布于 2019-09-30 03:13:48 字数 1285 浏览 975 评论 0 收藏 0

GIN 接口有一个高层次的抽象,仅要求实现被访问数据类型的语义即可。GIN 层自身可以处理并发操作、记录日志、搜索树结构。

定义一个 GIN 访问方法所要做的所有事情就是实现四个用户定义的方法,这些方法定义了 key 在树中的行为、key 与 key 之间的关系、被索引的值、能够使用索引的查询。简而言之,GIN 将扩展性与普遍性、代码重用、清晰的接口结合在了一起。

一个 GIN 索引操作符类必须实现的四个方法如下:

int compare(Datum a, Datum b)

比较两个 key(不是被索引的值!)然后返回一个小于/等于/大于零的值,分别表示第一个 key 小于/等于/大于第二个 key

Datum* extractValue(Datum inputValue, uint32 *nkeys)

返回一个其值用于索引的 key 数组,数组中元素的个数存放在 *nkeys 中。

Datum* extractQuery(Datum query, uint32 *nkeys, StrategyNumber n)

返回一个其值用于查询的 key 数组。也就是说,query 是可索引操作符右侧的值,而该操作符左侧是被索引的字段。n 操作符类中操作符的策略号(参见 节33.14.2)。通常,extractQuery 用来通过考量 n 来决定 query 的数据类型以及需要提取的 key 值。数组中元素的个数存放在 *nkeys 中。

bool consistent(bool check[], StrategyNumber n, Datum query)

如果索引值满足查询策略号为 n 的操作符(或者如果该操作符在操作符类中被标记为 RECHECK 也可能满足)则返回 TRUE 。check 数组的长度必须与先前由 extractQuery 为该查询返回的 key 的数量相同。如果索引值包含相应的查询 key ,那么check 数组中的每一个元素都是 TRUE ,也就是如果 check[i] == TRUE ,那么 extractQuery 结果数组的第 i 个 key 存在于索引值当中。在 consistent 方法需要查看它的情况下,原始的 query datum(不是抽取出的 key 数组!) 将会被传递。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文