返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

50.2. 扩展性

发布于 2019-09-30 03:13:47 字数 710 浏览 1059 评论 0 收藏 0

通常,实现一种新的索引访问方法意味着大量的艰苦工作。必须理解数据库的内部工作机制,比如锁的机制和预写日志。GiST 接口有一个高层的抽像,只要求访问方法的实现者实现被访问的数据类型的语意。GiST 层本身会处理并发,日志和搜索树结构的任务。

不要把这个扩展性和其它标准搜索树的扩展性混淆在一起,比如它们所能处理的数据等方面。比如,PostgreSQL 支持可以扩展的 B-trees 。这就意味着呢可以用 PostgreSQL 在任意你需要的数据类型上建立 B-tree 。但是 B-trees 只支持范围谓词(<, =, >),而 hash 仅支持相等查询。

所以,如果你用PostgreSQL B-tree 索引了一个图像集,那么你就只能发出类似"图像 x 和图像 y 相等吗"、"图像 x 是不是比图像 y 小"、"图像 x 是否大于图像 y"?这样的查询。根据你在这个环境下定义的"等于"、"小于"、"大于"的含义,上面这些查询可能有意义。但是,使用一个基于 GiST 的索引,你可以创建一些方法来发出和域相关的问题,比如"找出所有马的图像"或者"找出所有曝光过头的图像"。

要让一种 GiST 访问模式跑起来的方法只是实现七个用户定义的方法,这七个方法定义了树里面的键字的行为。当然,为了支持那些怪异的查询,这些方法也会相当怪异,但是对于所有标准的查询(B-trees 等),他们是相当直接的。简单说,GiST 组合了扩展性和通用性,以及代码复用和一个干净的界面。

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

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

发布评论

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