PostGIS教程学习十九:基于索引的聚簇

news/2024/7/9 21:23:30 标签: 学习, postgresql, 空间计算, 数据库

PostGIS教程学习十九:基于索引的聚簇

数据库只能以从磁盘获取信息的速度检索信息。小型数据库将完全位于于RAM缓存(内存),并摆脱物理磁盘访问速度慢的限制。但是对于大型数据库,对物理磁盘的访问将限制数据库的信息检索速度。

数据是偶尔写入磁盘的,因此存储在磁盘上的有序数据与应用程序访问或组织该数据的方式之间不需要存在任何关联。
在这里插入图片描述
加速数据访问的一种方法是确保可能在同一结果集中一起被检索的记录位于硬盘上的相近物理位置。这就是所谓的"聚簇(clustering)"。

要使用正确的聚簇方案可能很棘手,但可以遵循一条通用性规则:索引定义了数据的自然排序方案,该方案类似于检索数据的访问模式。
在这里插入图片描述
正因为如此,在某些情况下,以与索引相同的顺序对磁盘上的数据进行排序可以加速数据访问速度。

文章目录

  • PostGIS教程学习十九:基于索引的聚簇
  • 一、基于R-Tree的聚簇
  • 二、GeoHash上的集群
  • 三、本文涉及函数


一、基于R-Tree的聚簇

空间数据倾向于在客户端的窗口中访问:想想Web应用程序或桌面应用程序中的地图窗口。窗口中的所有数据都具有相近的位置信息(否则它们将不在相同的窗口中!)。

因此,基于空间索引的聚簇对于将通过空间查询访问的空间数据是有意义的:相似的事物往往具有相似的位置(地理学第一定律)。

让我们根据nyc_census_blocks的空间索引对该表数据进行聚簇(将数据放置在硬盘上的相近物理位置):

CLUSTER nyc_census_blocks USING nyc_census_blocks_geom_idx;

在这里插入图片描述
该命令按照空间索引nyc_census_blocks_geom_idx所定义的顺序将数据重新写入nyc_census_blocks。你能感觉到访问数据的速度的差异吗?可能不会,因为表很小,很容易装入内存(缓存在内存中),所以磁盘访问开销不会影响性能。

R-Tree的一个令人惊讶的地方是,基于空间数据而递增构建的R-Tree可能没有很高的叶子结点(每个叶子结点对应一个地理区域和一个磁盘页)的空间协调性、一致性(spatial coherence)。例如,请参见不列颠哥伦比亚省(province of British Columbia)道路的空间索引叶节点的可视化:
在这里插入图片描述
我们更喜欢使用空间更均衡紧凑、排列合理的R-tree索引结构进行集群,比如这种平衡的R-Tree(balanced R-Tree)。
在这里插入图片描述
在PostGIS中没有平衡R-Tree的算法,但我们有一个有用的代替方法,可以对空间数据根据空间自相关的顺序进行排列,即ST_GeoHash()函数。

二、GeoHash上的集群

要使用ST_GeoHash()函数进行聚簇,首先需要在数据上有一个geohash索引。幸运的是,它们很容易构建。

geohash算法仅适用于地理(经度/纬度)坐标中的数据,因此我们需要在对其进行哈希操作之前先转换几何图形(转换为EPSG:4326,即经度/纬度):

CREATE INDEX nyc_census_blocks_geohash ON nyc_census_blocks (ST_GeoHash(ST_Transform(geom, 4326)));

在这里插入图片描述
一旦有了geohash索引,就可以使用和R-Tree聚簇相同的语法进行聚簇。

CLUSTER nyc_census_blocks USING nyc_census_blocks_geohash;

在这里插入图片描述
现在,数据就很好地以空间自相关的顺序排列!

三、本文涉及函数

ST_GeoHash(geometry A): Returns a text string representing the GeoHash of the bounds of the object.


http://www.niftyadmin.cn/n/5314274.html

相关文章

(一)Spring Cloud 直击微服务作用、架构应用、hystrix降级

直击微服务作用 微服务架构: 遇到了什么问题? 将单体架构拆分成微服务架构后,如果保证多个服务(项目)正常运行? 哪个技术可以解决这个问题? 微服务技术 服务治理: 服务管理,维护服务与服务之间的关系 这个技术如何使用? netflix/网…

Spark避坑系列二(Spark Core-RDD编程)

大家想了解更多大数据相关内容请移驾我的课堂: 大数据相关课程 剖析及实践企业级大数据 数据架构规划设计 大厂架构师知识梳理:剖析及实践数据建模 PySpark避坑系列第二篇,该篇章主要介绍spark的编程核心RDD,RDD的概念,基础操作 一、什么是RDD 1.1 概念 RDD(Resilient…

【RDMA】RDMA事件通知机制详解

RDMA通过kernel-bypass和协议栈offload两大核心技术,实现了远高于传统TCP/IP的网络通信性能。尽管RDMA的性能要远好于TCP/IP,但目前RDMA的实际落地业务场景却寥寥无几,这其中制约RDMA技术大规模上线应用的主要原因有两点: 主流互…

深度学习中Epoch和Batch Size的关系

在深度学习中,Epoch(周期)和 Batch Size(批大小)是训练神经网络时经常使用的两个重要的超参数。它们之间的关系是通过以下方式连接的: Epoch(周期): Epoch 表示整个训练…

【VRTK】【Unity】【VR开发】Linear Drives

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 前面一篇讨论了角度运动机制,本篇讨论线性运动机制。和角度运动机制类似,线性运动机制提供了更为仿真的互动机制。也分为基于物理的和不基于…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT,这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型,GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品,llama.cpp 不再…

自动化生产线-采用工业机器人比人工有哪些优势?

工业机器人相对于人工具有一些显著的优势,这些优势使它们在制造和生产领域得到广泛应用。以下是工业机器人相对于人工的一些主要优势: 1、精度和一致性: 机器人可以执行高精度的操作,确保产品的质量和规格一致,而且不容…

linux 内核工作延迟机制-工作队列

一、概述 作用: 内核中执行延迟执行或者异步执行的机制,运行在抢占上下文中,中断下半部分需要要睡眠,工作队列是唯一选择。 睡眠是指处理I/O数据、持有互斥锁、延迟,以及可能导致睡眠或将任务移出运行队列的所有其他…