在 PostGIS 中进行千万级空间数据的空间查询和关键字查询

一、目的

本测试在探究在有限的计算机配置下,如何高效地对千万级的空间数据进行空间查询和关键字查询。通过实际操作和测试,评估不同查询策略的性能,为处理大规模空间数据提供可行的解决方案。

计算机配置如下:

  • 内存(16G)
    • 内存 1 名称为 3200 MHz,大小 8GB,频率 3200 MHz,数据宽度 64。
    • 内存 2 名称为 3200 MHz,大小 8GB,频率 3200 MHz,数据宽度 64。
  • CPU(AMD 6 核 4600Hz)
    • CPU 名称为超微半导体 AMD Ryzen 5 4600H with Radeon Graphics
    • 六核,核心数 6,
    • 默认频率 3000 MHz,外频 100 MHz,当前频率 3000 MHz,
    • 二级缓存为 512-KB,12-way set associative,64-byte line size,
    • 三级缓存为 64-KB,18-way set associative,64-byte line size,
    • CPU 电压 1.200 V,
    • 数据宽度 64。
  • 硬盘(SSD)
    • 厂商为 Micron MTFDHBA512TDV,大小 512GB。

二、主要思路

  1. 首先,在给定的计算机配置下,创建一个包含1千万条空间数据的表random_points。数据范围假定在经度 100 - 170,纬度在 20 - 70 之间,采用 4326 坐标系。
  2. 为了更符合一般兴趣点的规则,表中的属性字段pname的生成规则为前半部分每 2000 个相同,由md5((id%5000)::text))的前半部分和md5(random()::text))的后半部分组成,并进行了两次字符串处理,分别在第五个字符和第九个字符处插入空格。
  3. 分别为属性字段pname和空间字段geom创建 GIST 类型索引,以提高查询效率。
  4. 构建一个多边形,然后进行空间查询和关键字查询的组合操作,即查询包含在多边形中,并满足关键字要求的前 100 条记录。

三、主要过程

  1. 删除和创建表

首先使用以下 SQL 语句删除可能存在的同名表:

      drop t**ab**le if exists random_points;

然后使用以下 SQL 语句创建表random_points,包含字段id、空间字段geom和属性字段pname。生成的数据范围在经度 100 - 170,纬度在 20 - 70 之间,4326 坐标系。pname字段存储属性信息,前半部分为md5((id%5000)::text)),后半部分为md5(random()::text))。创建表耗时 90s。

create t**ab**le random_points as
  with bounds as (
select
	100 as origin_x,
	20 as origin_y,
	70 as width,
	50 as height
  )
  select
	id,
	ST_Point(width * (random() - 0.5) + origin_x,height * (random() - 0.5) + origin_y,4326)::Geometry(Point,4326) as geom,
	concat(
		substring(md5
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值