博客
关于我
PostgreSQL cube 插件 - 多维空间对象
阅读量:804 次
发布时间:2023-03-03

本文共 2171 字,大约阅读时间需要 7 分钟。

PostgreSQL CUBE 类型与GiST索引应用指南

标签

PostgreSQL , cube , GiST索引 , 多维 , 欧几里得

背景

CUBE 是 PostgreSQL 中的一个多维数据类型,支持两种多维类型:多维 POINT 和区间(左下 + 右上)。CUBE 提供了几何对象的几何特性搜索和计算功能,包括方位搜索和距离计算,这些搜索都支持 GiST 索引。

通过将多个字段合并成多维 POINT,可以实现对大量数据的高效空间聚集和空间计算。这种多维处理能力使得 CUBE 成为处理复杂几何数据的强大工具。

语法

CUBE 提供了多种表示方式来定义多维数据:

外部表示 语义描述
x 一维点(或零长度一维区间)
(x) 与上相同
x1,x2,...,xn n 维空间中的点,由零体积的立方体表示
(x1,x2,...,xn) 与上相同
(x),(y) 一维区间(线段),表示每个维度的最小值(左括号)和最大值(右括号)
[(x),(y)] 与上相同
(x1,...,xn),(y1,...,yn) n 维立方体,由两个对角线点定义
[(x1,...,xn),(y1,...,yn)] 与上相同

操作符

以下是 CUBE 支持的一些操作符及其结果:

操作符 结果类型 描述
a = b boolean a 和 b 是相同的立方体
a && b boolean a 和 b 有重叠
a > b boolean a 包含 b
a <@ b boolean a 被包含在 b 中
a < b boolean a 小于 b
a <= b boolean a 小于或等于 b
a > b boolean a 大于 b
a >= b boolean a 大于或等于 b
a <@> b boolean a 不等于 b
a - n float8 获取第 n 个坐标(从 1 开始计数)
a ~ n float8 获取第 n 个坐标的“标准化”表示
a <#> b float8 欧几里得距离
a <-> b float8 替代制度距离(曼哈顿距离)
a <&> b float8 别称为 Chebyshev 距离

函数

以下是一些常用的 CUBE 函数:

函数名称 返回类型 描述
cube(float8) cube 创建一个一维点立方体
cube(float8, float8) cube 创建一个一维区间
cube(float8[]) cube 创建一个零体积立方体
cube(float8[], float8[]) cube 创建一个立方体,由两个对角线点定义
cube(cube, float8) cube 在现有立方体上增加一个维度
cube(cube, float8, float8) cube 类似于上述方法,增加多个维度
cube_dim(cube) integer 返回立方体的维度数量
cube_ll_coord(cube, integer) float8 获取立方体的第 n 个下左角坐标
cube_ur_coord(cube, integer) float8 获取立方体的第 n 个上右角坐标
cube_is_point(cube) boolean 检查立方体是否为点(两端点相同)
cube_distance(cube, cube) float8 计算两个立方体之间的距离
cube_subset(cube, integer[]) cube 从现有立方体中提取子立方体
cube_union(cube, cube) cube 计算两个立方体的并集
cube_inter(cube, cube) cube 计算两个立方体的交集
cube_enlarge(cube, float8, integer) cube 增大立方体的大小

例子

以下是一些实际应用示例:

  • 向量聚合(类似多维聚集)通过将多个点合并,可以创建一个多维立方体,实现空间聚集。

  • 4 维(包含)的聚集分析CUBE 数据类型支持多维数据的聚集分析,适用于高维数据处理。

  • 求多维点的距离

    • 欧几里得距离:SELECT '(1,2,3,4)'::cube <-> '(2,2,3,10)'::cube
    • 替代制度距离:SELECT '(1,2,3,4)'::cube <#> '(2,2,3,10)'::cube
    • 别称为 Chebyshev 距离:SELECT '(1,2,3,4)'::cube <&> '(2,2,3,10)'::cube
    1. 按距离排序,输出附近的多维点SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;

    2. 创建 GiST 索引并聚集存储CREATE INDEX idx ON tbl USING gist (cube(array[c1,c3,c4,c5,c6]))CLUSTER tbl USING idx;

    3. 聚集存储后的查询性能提升通过 GiST 索引优化了查询性能,显著提高了数据检索效率。

    4. 参考

      本文主要介绍了 PostgreSQL CUBE 类型及其 GiST 索引的应用示例和使用方法。通过合理设计多维数据结构,可以高效地执行空间聚集、距离计算等操作。

    转载地址:http://lnxfk.baihongyu.com/

    你可能感兴趣的文章
    pymongo update_one(),upsert=True,不使用$运算符
    查看>>
    pymongo 中的快速或批量更新
    查看>>
    PyQ5学习笔记——使用内部槽函数关闭窗口
    查看>>
    PyQ5学习笔记——使用自定义槽函数关闭窗口
    查看>>
    PyQt MimeData 文件名
    查看>>
    PyQt QML Material Design 按钮背景不会改变
    查看>>
    PyQt QString转成python stirng
    查看>>
    PyQt QToolButton在焦点时不更新图标
    查看>>
    PyQt 正确使用 emit() 和 pyqtSignal()
    查看>>
    PyQT-将文件复制到剪贴板
    查看>>
    PyQt4, class:mouseButtons用法
    查看>>
    PyQt4参考文档
    查看>>
    PyQt5 - QThread:在线程仍在运行时被销毁
    查看>>
    PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件
    查看>>
    PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用
    查看>>
    PyQt5 按钮运行功能和更新 LCD
    查看>>
    pyqt5 获取Qlabel中的图片并对其进行处理(包括Qimage转换为Mat)
    查看>>
    PyQt5-基本窗口控件-QMainWindow
    查看>>
    PyQt5:如何安装/运行 Qt 设计器
    查看>>
    PyQt5——pyqtgraph绘图大招
    查看>>