PostGIS数据测试-一百万点要素

news2024/11/23 15:24:50

PostGIS数据测试-一百万点要素

小小测试一下,看看单表百万数据的情况

服务器配置

  • 系统版本:Centos7.9.2009
  • CPU:两颗Intel® Xeon® Gold 6226R CPU @ 2.90GHz处理器,共32核心
  • 内存:DDR4 256G
  • 硬盘:Raid5 共24T
  • 数据库版本:PostgreSQL13+PostGIS3.0

创建表

不添加GIS索引

create table geo_point_one_million_without_index
(
    uid  uuid default uuid_generate_v4() not null
        constraint geo_point_one_million_without_index_pk
            primary key,
    geom geometry
);

comment on table geo_point_one_million_without_index is '点测试(一百万_没有geo索引)表';

comment on column geo_point_one_million_without_index.geom is '地理坐标';

alter table geo_point_one_million_without_index
    owner to postgres;

添加GIS索引

create table geo_point_one_million
(
    uid  uuid default uuid_generate_v4() not null
        constraint geo_point_one_million_pk
            primary key,
    geom geometry
);

comment on table geo_point_one_million is '点测试(一百万)表';

comment on column geo_point_one_million.geom is '地理坐标';

alter table geo_point_one_million
    owner to postgres;

create index idx_geom_geo_point_one_million
    on geo_point_one_million using gist (geom);

ST_GeneratePoints

这里我们使用PostGIS的ST_GeneratePoints函数来创建随机点。

ST_GeneratePoints官方介绍

格式

geometry ST_GeneratePoints( g geometry , npoints integer );

geometry ST_GeneratePoints( geometry g , integer npoints , integer seed );

描述

ST_GeneratePoints生成位于输入区域内的给定数量的伪随机点。可选的 seed 用于重新生成确定性的点序列,并且必须大于零。

可用性:2.3.0

增强:3.0.0,添加种子参数

示例

img

使用随机种子值1996生成了覆盖在原始面顶部的12个点

SELECT ST_GeneratePoints(geom, 12, 1996)
FROM (
    SELECT ST_Buffer(
        ST_GeomFromText(
        'LINESTRING(50 50,150 150,150 50)'),
        10, 'endcap=round join=round') AS geom
) AS s;

生成数据

不添加索引的数据

以江苏省范围为边界,随机生成一百一十万个点

insert into geo_point_one_million_without_index (geom)
SELECT (
           ST_Dump(
                   ST_GeneratePoints(bound.geom, 1100000)
               )).geom AS geom
FROM (
         select geom
         from province
     ) bound;

查看数据库总数如下:

image-20221206140756990

加载到地图上如下所示,

image-20221206140714646

添加索引的数据

以江苏省范围为边界,随机生成一百一十万个点

insert into geo_point_one_million (geom)
SELECT (
           ST_Dump(
                   ST_GeneratePoints(bound.geom, 1100000)
               )).geom AS geom
FROM (
         select geom
         from province
     ) bound;

效果如上图所示

数据查询效率比较

使用统一范围进行查询,查询范围内的点数据

查询没有索引的表

select geom
from geo_point_one_million_without_index
where ST_Intersects(geom,
                    st_transform(st_setsrid(st_geomfromewkt(
                                                    'POLYGON ((119.72706893295168 33.459312148850884, 119.72395052277068 33.44938433824096, 119.72271659870063 33.4495696575886, 119.7178056612509 33.424791447676355, 119.74576996445631 33.42143309794773, 119.74810254818226 33.42089897286719, 119.75342279140625 33.44529968061062, 119.75459464757762 33.45337738499248, 119.72706893295168 33.459312148850884))'),
                                            4326)
                        , 4490));

如图所示:

image-20221206145145739

经过多次测试,查询时间分布在460ms~550ms左右

查询有索引的表

select geom
from geo_point_one_million
where ST_Intersects(geom,
                    st_transform(st_setsrid(st_geomfromewkt(
                                                    'POLYGON ((119.72706893295168 33.459312148850884, 119.72395052277068 33.44938433824096, 119.72271659870063 33.4495696575886, 119.7178056612509 33.424791447676355, 119.74576996445631 33.42143309794773, 119.74810254818226 33.42089897286719, 119.75342279140625 33.44529968061062, 119.75459464757762 33.45337738499248, 119.72706893295168 33.459312148850884))'),
                                            4326)
                        , 4490));

如图所示:

image-20221206145550229

经过多次测试,查询时间分布在60ms~110ms左右

结果分析

初略对比进行分析,以110万点数据为例,可以看到添加索引后,查询速度提升了4~5倍。表数据越大或查询范围越大,提升的效果越明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树选择排序(Tree Selection Sorting)介绍

简介 或许你有一个疑问:为什么堆排序使用二叉树,但是叫堆排序,而不是树排序? 因为堆排序的前身正是叫做树选择排序(Tree Selection Sorting),使用树结构,但是要稍微简单一些。 高德…

CNN卷积参数量计算

参考:轻量级网络-Mobilenet系列(v1,v2,v3) - 知乎 盘点下每种类型的层计算可学习参数的数量 Input layer:输入层所做的只是读取输入图像,因此这里没有可以学习的参数。 Convolutional layers:一个卷积层,其输入为l个特…

cassandra安装及配置

Cassandra介绍 Cassandra是一个开源的、分布式、无中心节点、弹性可扩展、高可用、容错、一致性协调、面向列的NoSQL数据库。 Cassandra的主要组成部分主要有: • 节点(Node):Cassandra节点是存储数据的地方。 • 数据中心(Data center):数据中心是相关节点的集合。 • 集群…

Vue3 企业级优雅实战 - 组件库框架 - 8 搭建组件库 cli

前面的文章分享了组件库的开发、example、组件库文档,本文分享组件库 cli 开发。 1 为什么要开发组件库 cli 回顾一个新组件的完整开发步骤: 1 在 packages 目录下创建组件目录 xxx: 1.1 使用 pnpm 初始化 package.json,修改 n…

【正点原子FPGA连载】第二十八章 以太网ARP测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第二十八章 以太…

(十七) 共享模型之工具【JUC】【读写锁】

一、ReentrantReadWriteLock(P247) 当读操作远远高于写操作时,这时候使用 【读写锁】让 【读-读】可以并发,提高性能。 类似于数据库中的 select ... from ... lock in share mode 提供一个 数据容器类内部分别使用读锁保护数据的…

【论文阅读 CIKM‘2021】Learning Multiple Intent Representations for Search Queries

文章目录Original PaperMotivationMethodTask Description and Problem FormulationNMIR Framework: A High-Level OverviewModel Implementation and TrainingDataOriginal Paper Learning Multiple Intent Representations for Search Queries More related papers can be …

基于Electron的桌面端应用开发和实践

引言 如果开发跨桌面端的应用开发的话,我相信,electron目前绝对是不可避免的技术方案。web应用大家都知道,通过浏览器访问的应用就是web应用,那什么是桌面端?桌面端有两个重要特点: 具备独立运行于操作系…

学习压力容器中卡箍快开结构的强度计算

导读:压力容器的设计一定要考虑安全性、经济性、环保及健康问题。首先安全是核心问题,在保证安全的前提下尽可能的再做到经济合理。 本文从强度计算软件SW6-2011 V3.1补丁二(单机版)和(网络版)所解决的问题&#xff0…

Redis 性能问题优化方案

Redis性能问题&优化方案前言Redis真的变慢了吗?使用复杂度过高的命令操作bigkey集中过期实例内存达到上限fork耗时严重开启内存大页开启AOF绑定CPU使用Swap碎片整理网络带宽过载其他原因频繁短连接运维监控其它程序争抢资源总结前言 Redis 作为优秀的内存数据库…

Java高效率复习-MySQL上篇[MySQL]

前言 本文章是用于总结尚硅谷MySQL教学视频的记录文章,主要用于复习,非商用 原视频连接:https://www.bilibili.com/video/BV1iq4y1u7vj/?p21&spm_id_frompageDriver&vd_sourcec4ecde834521bad789baa9ee29af1f6c https://www.bilib…

Spring Boot 项目优化和 JVM 调优,亲测!真实有效。。

三、Jvm调优实战 1、未设置JVM参数的情况 我现在有一个项目,默认情况下,没有设置任何Jvm参数。 下面我来启动看一下。 看一下堆栈分配: 很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。 2、下面我们来设置下Jvm参数 例如要配置JVM…

vue2 ElementUI 表单标签、表格表头添加问号图标提示

文章目录1. 问题背景2. element-ui悬浮提示定义3. 基础4. 延申5. 参考1. 问题背景 使用element-ui有时候需要对表格的表头、表单的标签进行自定义,添加问号的悬浮提示。 要达到的效果,如图所示: 2. element-ui悬浮提示定义 https://elemen…

【菜菜的sklearn课堂笔记】聚类算法Kmeans-基于轮廓系数来选择n_clusters

视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 我们通常会绘制轮廓系数分布图和聚类后的数据分布图来选择我们的最佳n_clusters from sklearn.metrics import silhouette_samples,silhouette_s…

c++还原简单的vector

文章目录vectorvecotor的介绍vector的模拟实现类的框架成员变量迭代器构造函数析构函数size()capacity()operator[]重载扩容resize()尾插验证是否为空尾删clear 清除swap交换insert插入erase删除迭代器区间初始化构造函数拷贝构造赋值运算符重载n个val构造函数再谈构造函数vect…

数仓日记 - 数仓理论

寒刃尽断处,吾心作剑霜作锋🏂 目录 一、数仓简介 二、关系建模与维度建模 1. 关系建模   2. 维度建模    • 三种模型    • 事实表    • 维度表   3. 事实表的分类    • 事务型事实表    • 周期型快照事实表    • 累积型快照事实表…

Python操作Excel表格

本文介绍如何通过轻量级、零依赖(仅使用标准库)的 pylightxl 库操作Excel表格。 官网:Welcome to pylightxl documentation — pylightxl 2019 documentation 目录 一、入门 1. 读写CSV文件 2. 读Excel文件 3. 获取工作表和单元格数据 3…

前端css实现特殊日期网页变灰功能

前端变灰效果在网页实际使用过程中使用的比较少,但有时候又缺一不可,一般在大型哀悼日或纪念日的时候使用,使用后的网站页面会变成灰色(黑白色)。 我们先看下各大网站是怎么实现的: 1.csdn实现方式 2.淘宝 3.人民网 4.京东 5.掘…

Unity【Multiplayer 多人在线】服务端、客户端通用架构的使用指南

文章目录🚩 Import🚀 protogen使用方法🪐 客户端接口🌈 服务端接口🧭 数据处理🎨 Example🚩 Import 下载SKFramework框架,导入到Unity中; 在框架Package Manager中搜索并…

osgEarth示例分析——osgearth_colorfilter

前言 osgearth_colorfilter颜色过滤器示例。本示例中,主要展示了6种颜色过滤器的使用,分别是:HSLColorFilter、RGBColorFilter、CMYKColorFilter、BrightnessContrastColorFilter、GammaColorFilter、ChromaKeyColorFilter。 执行命令 // 一条命令是一…