当前位置: 首页 > news >正文

【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响

注:使用postgresql数据库会用到PostGIS 扩展。

一、安装PostGIS 扩展

在 PostgreSQL 中遇到错误 “type geography does not exist” 通常意味着你的 PostgreSQL 数据库还没有安装 PostGIS 扩展,或者 PostGIS 扩展没有被正确地安装在你的数据库中。geography 类型是 PostGIS 提供的,用于存储和处理地理空间数据,特别是考虑到地球曲率的地理数据。

要解决这个问题,请按照以下步骤操作:

1、确认 PostGIS 是否已安装

你可以通过查询 PostgreSQL 的扩展列表来确认 PostGIS 是否已经安装在你的数据库中。运行以下 SQL 命令:

SELECT * FROM pg_extension;

如果列表中没有 PostGIS,那么你需要安装它。

2、安装 PostGIS

如果你还没有安装 PostGIS,你可以通过 PostgreSQL 的包管理器(如 apt-get、yum、brew 等,取决于你的操作系统)或者通过 PostgreSQL 的 SQL 命令来安装它。但是,通常建议使用包管理器来安装,因为它会处理所有依赖项。

如果你正在使用 PostgreSQL 的 SQL 命令来安装扩展(这通常是在你已经有了 PostgreSQL 和相应的权限之后),你可以运行以下命令(但请注意,这通常不是安装 PostGIS 扩展的推荐方式,因为它假设你的系统上已经有了 PostGIS 的二进制文件):

CREATE EXTENSION IF NOT EXISTS postgis;

但是,如果 PostGIS 的二进制文件没有在你的 PostgreSQL 的库路径中,这个命令将会失败。

3、使用包管理器安装 PostGIS

根据你的操作系统,你可以使用相应的包管理器来安装 PostGIS。

需要根据postgresql的版本安装对应的postgis

psql --version             #查看postgresql版本  为postgresql 16.*

例如,在 Ubuntu 上,你可以使用 apt-get

sudo apt-get update
sudo apt-get install postgresql-16-postgis-3 # 注意版本号可能不同

在 CentOS 上,你可以使用 yum

sudo yum install postgis30_12 # 注意版本号可能不同

在 macOS 上,如果你使用 Homebrew,你可以安装 PostgreSQL 和 PostGIS:

brew install postgis

但是,对于 macOS 上的 Homebrew,你可能还需要在 PostgreSQL 数据库中手动启用 PostGIS 扩展。

4、先重启数据库,然后在数据库中启用 PostGIS

重启数据库

systemctl restart postgresql

如果你已经通过包管理器安装了 PostGIS,但还没有在你的数据库中启用它,你需要登录到你的 PostgreSQL 数据库,并运行以下 SQL 命令来创建扩展:

CREATE EXTENSION IF NOT EXISTS postgis;

5、使用 SQL 查询

在 PostgreSQL 的命令行工具 psql 中,你可以通过查询数据库来确定 PostGIS 是否已经安装并可用。执行以下 SQL 命令:

SELECT PostGIS_Full_Version();

如果 PostGIS 已安装,这条命令将返回 PostGIS 的完整版本信息。如果返回错误或没有任何输出,则可能表示 PostGIS 没有安装或尚未在数据库中启用。

6、检查 geography 类型

安装并启用 PostGIS 后,你应该能够在你的数据库中看到 geography 类型。你可以通过查询 PostgreSQL 的系统目录来确认这一点:

SELECT typname FROM pg_type WHERE typname = 'geography';

如果查询返回了结果,那么 geography 类型就已经在你的数据库中可用了。

如果你已经按照上述步骤操作,但仍然遇到问题,请检查你的 PostgreSQL 和 PostGIS 的版本兼容性,并确保你的数据库用户有足够的权限来创建扩展。

7、写入数据测试功能

举例: postgresql 数据类型geography 的写入方式

1) 创建包含 geography 类型的表

CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
geom GEOGRAPHY(Point, 4326) -- 4326 是 WGS 84 坐标系统的 SRID
);

在这个例子中,geom 列用于存储地理位置数据,它是一个 geography 类型的点(Point)。4326 是 WGS 84 坐标系统的 SRID(Spatial Reference System Identifier),它是全球定位系统使用的标准坐标系统。

2)插入 geography 数据

方法一:使用文本字符串插入

你可以使用 Well-Known Text (WKT) 格式或 Well-Known Binary (WKB) 格式来插入地理数据。WKT 是一种文本标记法,用于表示空间数据。

INSERT INTO locations (name, geom)
VALUES ('New York', ST_GeogFromText('POINT(-74.0060 40.7128)'));

这里,ST_GeogFromText 函数将 WKT 字符串转换为 geography 类型的点。

方法二:使用经纬度直接插入

PostGIS 也允许你直接使用经纬度值来创建 geography 类型的点,使用 ST_MakePoint 函数结合 ST_SetSRID 和 ST_Transform(如果需要的话,但在这个例子中我们直接使用 WGS 84,所以不需要转换)。

INSERT INTO locations (name, geom)
VALUES ('London', ST_SetSRID(ST_MakePoint(-0.1278, 51.5074), 4326)::geography);

注意,这里 ST_MakePoint 创建了一个 geometry 类型的点,然后使用 ST_SetSRID 设置其 SRID 为 4326,最后通过显式类型转换(::geography)将其转换为 geography 类型。

二、报错记录

1、ERROR: extension "postgis" is not available DETAIL: Could not open extension control file "/usr/share/postgresql/16/extension/postgis.control": No such file or directory. HINT: The extension must first be installed on the system where PostgreSQL is running.

这个错误信息表明 PostgreSQL 无法找到 PostGIS 扩展的控制文件,这通常说明:

1)意味着 PostGIS 还没有被安装在你的系统上,或者它的安装位置不在 PostgreSQL 预期的位置。

2)安装的版本于数据库版本不匹配。

比如,你正在使用 PostgreSQL 16,你需要确保你安装的 PostGIS 版本与 PostgreSQL 16 兼容。如果可能的话,使用与你的 PostgreSQL 版本相对应的 PostGIS 版本。

3)重新启动 PostgreSQL 服务
修改配置文件或安装新软件后,通常需要重新启动 PostgreSQL 服务来使更改生效。你可以使用你的系统的服务管理工具来重启 PostgreSQL(例如,在 Ubuntu 上使用 sudo systemctl restart postgresql)。

4)检查权限和错误日志
如果问题仍然存在,检查 PostgreSQL 的错误日志以获取更多信息。此外,确保你的数据库用户有足够的权限来创建和使用扩展。

2、安装错了版本,先卸载再重新装

使用apt-get安装的软件包卸载方法相对直接,主要涉及到几个关键的apt-get命令。以下是根据高权威性来源信息总结的卸载步骤:

卸载软件包

  1. 卸载软件包并保留配置文件:

    sudo apt-get remove package_name

    这个命令会卸载指定的软件包,但会保留其配置文件。如果不需要配置文件,可以使用下一个命令。

  2. 卸载软件包并删除配置文件:

    sudo apt-get --purge remove package_name

    这个命令不仅会卸载软件包,还会删除其配置文件。这是完全卸载软件包并清理其残留配置文件的推荐方法。

清理不再需要的依赖包

在卸载软件包后,有时可能会留下一些不再被其他软件包依赖的依赖包。为了清理这些不再需要的依赖包,可以使用:

sudo apt-get autoremove

这个命令会自动删除那些现在自动安装但不再被需要的软件包。

卸载并清除所有配置和依赖

如果需要更彻底地清理,可以结合使用--purgeautoremove选项,但请注意,apt-get本身没有直接的命令组合来同时执行这两个操作。通常,你会先执行--purge remove,然后执行autoremove

清理下载的软件包

为了节省磁盘空间,可以清理之前下载的.deb软件包文件:

sudo apt-get clean

这个命令会删除/var/cache/apt/archives//var/cache/apt/archives/partial/目录下的所有软件包文件。

三、理论基础

1、Geography和 Geometry 的区别

一: 区别:
在这里插入图片描述

  • geography采用的是地理坐标系(球面坐标),geometry是采用的是笛卡尔坐标系(平面坐标)
  • 如果数据在地理范围上是紧凑的(包含在州、县或市内),请使用基于笛卡尔坐标的geometry类型。
  • 如果你需要测量在地理范围上是分散的数据集(覆盖世界大部分地区)的距离,请使用geography类型。

当提出这样一个问题时,支持非点的几何图形的需求变得非常明显:“从洛杉矶到巴黎的航班路线距离冰岛有多远?”
在这里插入图片描述
在笛卡尔平面坐标系统上使用地理坐标(紫色线)产生了一个非常错误的答案!使用大圆路线(红线)则能得出正确的答案。

三、SQL示例

1、地图上有N个点,以148.35824, 42.234270点为中心,地图画一个半径为200海里的圆,获取圆圈内的所有坐标点

# longitude,latitude是两个string类型字段存储经、纬度,没用使用point类型,目前是第一个查询速度快,后续使用point类型再更新查询效率


SELECT *
FROM aisgfw_history_data
WHERE ST_DWithin(
        ST_GeogFromText('SRID=4326;POINT(' || longitude || ' ' || latitude || ')'),
        ST_GeogFromText('SRID=4326;POINT(132.35824 21.234270)'),
        300 * 1852
    );
#  执行40秒  
    
SELECT *  
FROM aisgfw_history_data  ais-- 假设你的表名为ais_data  
WHERE ST_DistanceSphere(  
    ST_SetSRID(ST_MakePoint(148.35824, 42.234270), 4326),  

                -- 创建一个地理点,注意经纬度顺序  
    ST_SetSRID(ST_MakePoint(ais.longitude, ais.latitude), 4326)  

                -- 假设ais_data表中包含lon和lat字段  
) <= 200 * 1852;      -- 200海里转换为米

#  执行16秒

这两个SQL查询都旨在从aisgfw_history_data表中筛选出与给定经纬度(148.35824, 42.234270)距离小于200海里的记录,但它们使用了不同的方法和函数。下面我将详细讲解这两个查询的区别、使用的函数的作用,以及哪个查询可能更高效。

  • 第一个查询

SELECT *
FROM aisgfw_history_data ais -- 注意这里的别名是ais,不是ais_data
WHERE ST_DistanceSphere(
ST_SetSRID(ST_MakePoint(148.35824, 42.234270), 4326),
ST_SetSRID(ST_MakePoint(ais.longitude, ais.latitude), 4326)
) <= 300 * 1852;
  • 函数作用
    • ST_MakePoint(x, y): 创建一个点,其中x是经度,y是纬度。
    • ST_SetSRID(geom, srid): 设置几何对象的空间参考系统ID(SRID)。在这里,SRID被设置为4326,即WGS 84坐标系。
    • ST_DistanceSphere(point1, point2): 计算两个地理点之间的球面距离(以米为单位)。
  • 查询逻辑
    • 这个查询直接计算每个记录点与给定中心点之间的距离,并筛选出距离小于或等于200海里(转换为米)的记录。
  • 第二个查询

WITH center_point AS (
SELECT ST_SetSRID(ST_MakePoint(148.35824, 42.234270), 4326)::geography AS center_geog
)
SELECT ah.mmsi, ah.longitude AS lon, ah.latitude AS lat
FROM aisgfw_history_data ah
JOIN center_point cp ON ST_DWithin(
ST_SetSRID(ST_MakePoint(ah.longitude, ah.latitude), 4326)::geography,
cp.center_geog,
300 * 1852
);
  • 函数作用(新增/不同点):
    • ST_DWithin(geom1, geom2, distance): 判断第一个几何对象是否在给定的距离内与第二个几何对象相交。这里,它用于判断点是否在给定半径的圆内(尽管实际上并没有创建圆的多边形表示)。
  • 查询逻辑
    • 使用WITH子句(公用表表达式,CTE)首先创建一个包含中心点坐标的临时表center_point
    • 然后,将aisgfw_history_data表与center_point表进行连接,连接条件是记录点与中心点之间的距离小于或等于300海里(转换为米)。

效率比较

  • 第一个查询
    • 直接在WHERE子句中计算每个记录点与中心点的距离,这可能会导致对表中每一行都进行距离计算,如果表很大,则可能非常耗时。
    • 但是,如果表中有适当的索引(尽管对于地理空间查询,直接在经纬度字段上创建常规索引可能不是最佳选择),并且查询优化器能够利用这些索引来减少需要计算距离的记录数,则性能可能会有所提高。
  • 第二个查询
    • 使用WITH子句和连接(JOIN)来组织查询,这可以使查询的逻辑更清晰,但在性能上并不一定有优势。
    • 然而,如果PostGIS能够优化ST_DWithin函数的使用,并且利用地理空间索引(如果已创建)来加速查询,则这个查询可能会更高效。
  • 总结
    • 哪个查询更高效取决于多种因素,包括表的大小、数据的分布、是否存在地理空间索引,以及PostgreSQL和PostGIS的查询优化器的性能。
    • 在没有具体数据和索引信息的情况下,很难确定哪个查询会更快。
    • 在实际应用中,建议对两种查询都进行测试,并根据实际情况选择性能更好的查询。

注意:在第二个查询中,将ST_SetSRID(...)::geography的结果直接用于ST_DWithin是合理的,因为ST_DWithin函数可以接受geography类型的参数,并且已经隐含地考虑了地球的曲率。但是,在第一个查询中,虽然也使用了ST_SetSRID(...)::geography(尽管在查询中未明确写出,但假设ST_DistanceSphere的输入已经是geography类型),但重点是ST_DistanceSphere函数本身。

2、查询耗时优化,查询耗时与字段类型、索引的关系

直接看结果

-- geom为geometry类型,已经加2个索引GiST类型、SP-GiST类型
-- geom_geog为geography类型,加索引GiST类型


-- geom为geometry类型,4千万数据耗时30秒,
SELECT * FROM aisgfw_history_data 
WHERE ST_DWithin(  
    ST_MakePoint(132.35824, 21.234270)::geography, -- 直接将ST_MakePoint结果转换为geography  
    geom::geography,  -- 将geometry转换为geography类型 
    300 * 1852 -- 300海里转换为米  
);

-- geom_geog 为geography类型, 4千万数据耗时1秒,
SELECT * FROM aisgfw_history_data 
WHERE ST_DWithin(  
    ST_MakePoint(132.35824, 21.234270)::geography, -- 转换为geography 类型
    geom_geog,    -- geography类型
    300 * 1852
);

-- geom为geometry类型,4千万数据耗时13秒,
SELECT *    
FROM aisgfw_history_data    
WHERE ST_DistanceSphere(    
    ST_MakePoint(132.35824, 21.234270)::geometry, -- 转换为geography类型  
    geom           -- geometry类型
) < 300 * 1852;

3、如何实现postgresql输入10个坐标点,获取坐标连线图形内的所有点,点的存储表是物理表, 空间表是临时的,按此要求重新输出

如果您的需求是点的存储表是物理表(即长期存储在数据库中),而空间表(包含多边形或多段线)是临时的(可能只在查询时构建),那么您可以在查询时动态地构造这个临时空间表,而不是事先将其存储在数据库中。

不过,在SQL查询中直接“构造”一个临时表通常意味着您会使用子查询、CTE(公用表表达式)或临时表(尽管这里的“临时”是指SQL执行期间的临时,而不是物理存储的临时表)。由于您可能不想在数据库中创建永久的临时表,我们将使用CTE或子查询。

以下是一个使用CTE来模拟临时空间表,并查询位于这个临时多边形内的所有点的示例:

-- 使用CTE定义临时多边形
WITH TemporaryPolygons AS (
SELECT
ST_SetSRID(ST_GeomFromText('POLYGON((-73.935242 40.730610, -73.936242 40.730610, -73.936242 40.731610, -73.935242 40.731610, -73.935242 40.730610))'), 4326) AS geom
)
-- 查询位于临时多边形内的点
SELECT p.id, p.geom
FROM points p
JOIN TemporaryPolygons tp ON ST_Within(p.geom, tp.geom);

在这个查询中:

  1. WITH TemporaryPolygons AS (...) 部分定义了一个CTE(TemporaryPolygons),它包含了一个由文本字符串构造的多边形,并使用ST_GeomFromText函数将其转换为几何对象,然后通过ST_SetSRID设置其空间参考系统。

  2. 接下来的SELECT查询从points表中选取点,并通过JOIN操作与CTE TemporaryPolygons进行连接,使用ST_Within函数来检查哪些点位于多边形内部。

这个查询在每次执行时都会重新计算多边形,而不会将其存储在数据库的任何物理表中。这样,您就可以根据需要灵活地定义不同的多边形,而无需预先在数据库中创建它们。

如果您需要在多次查询中重复使用相同的多边形,但又不希望将其存储在物理表中,您可以考虑将多边形定义为一个SQL变量(在PL/pgSQL函数或DO匿名代码块中)或在应用程序代码中定义它,然后在每次查询时将其作为参数传递。但是,对于简单的查询来说,CTE通常是一个更方便和直接的方法。

4、Geography数据类型的数据插入

#  geom为geometry类型 ,geom_geog为geography类型

INSERT INTO aisgfw_history_data (mmsi, latitude, longitude, time, sog, cog, geom,

geom_geog)
VALUES ('367819000', 39.2678, -76.57027, '2024-09-04 16:10:42', 0, 232.1,
            ST_SetSRID(ST_MakePoint(-76.57027, 39.2678), 4326), 
            ST_GeographyFromText('SRID=4326;POINT(-76.57027 39.2678)')

);

INSERT INTO aisgfw_history_data (mmsi, latitude, longitude, time, sog, cog, geom, geom_geog)
VALUES ('367819000', 39.2678, -76.57027, '2024-09-04 16:10:42', 0, 232.1,
            ST_SetSRID(ST_MakePoint(-76.57027, 39.2678), 4326), 
            ST_SetSRID(ST_MakePoint(-76.57027,39.2678), 4326)

);

5、数据存储类型的考量 :
PostgreSQL 支持多种地理空间数据类型,如 POINT、LINESTRING、POLYGON 、geography、geometry等。在创建表时,需要根据实际需求选择合适的数据类型来存储地理空间数据。几种数据类型的适用场景?数据量?查询效率?地理坐标更适合哪个?

PostgreSQL通过PostGIS扩展支持多种地理空间数据类型,这些数据类型为存储和查询地理空间数据提供了丰富的选项。下面将针对您提到的POINT、LINESTRING、POLYGON、geography、geometry等数据类型,从适用场景、数据量、查询效率以及地理坐标的适用性等方面进行详细分析。

1. POINT

适用场景:

  • 用于表示单个地理位置点,如城市位置、地标等。

数据量:

  • 数据量相对较小,因为每个点仅包含一对坐标(经度和纬度)。

查询效率:

  • 查询效率较高,因为点的表示简洁且易于索引。

地理坐标的适用性:

  • 非常适合存储具体的地理坐标点。

2. LINESTRING

适用场景:

  • 用于表示一系列有序的、连接的点,如道路、河流等线性特征。

数据量:

  • 数据量相对较大,因为包含多个点及其连接关系。

查询效率:

  • 查询效率取决于数据复杂度和索引的使用情况。使用适当的空间索引(如GIST或SP-GIST)可以显著提高查询效率。

地理坐标的适用性:

  • 适用于表示连续的线性地理特征。

3. POLYGON

适用场景:

  • 用于表示具有闭合边界的平面区域,如国家边界、湖泊等。

数据量:

  • 数据量较大,因为需要存储多个点以形成闭合多边形。

查询效率:

  • 类似LINESTRING,查询效率也取决于数据复杂度和索引的使用情况。使用空间索引可以优化查询性能。

地理坐标的适用性:

  • 非常适合表示具有明确边界的地理区域。

4. geography

适用场景:

  • 用于存储和查询地球上两点之间的最短路径(大圆距离)相关的地理空间数据。

数据量:

  • 与POINT、LINESTRING、POLYGON类似,但特别适用于需要精确计算地理距离的场景。

查询效率:

  • 提供了对地球曲率的考虑,因此在进行地理距离计算时更准确,但可能稍慢于简单的二维平面计算。

地理坐标的适用性:

  • 非常适合需要精确地理距离计算的场景,如物流、导航等。

5. geometry

适用场景:

  • 是一个非常通用的地理空间数据类型,可以表示点、线、面等多种几何形状。

数据量:

  • 数据量根据具体表示的几何形状而异,可能非常大。

查询效率:

  • 类似于LINESTRING和POLYGON,查询效率取决于数据复杂度和索引的使用情况。

地理坐标的适用性:

  • 通用性强,适用于各种地理空间数据的存储和查询。

总结

在选择地理空间数据类型时,需要考虑以下因素:

  • 数据的性质和特点:根据要表示的地理空间特征选择合适的类型。
  • 数据量:考虑数据类型对存储空间的需求。
  • 查询效率:选择能够支持高效查询的索引策略。
  • 地理坐标的适用性:确保所选类型能够准确表示所需的地理坐标信息。

综上所述,每种地理空间数据类型都有其特定的适用场景和优势。在实际应用中,应根据具体需求和数据特点进行选择。

【PostgreSQL】地理空间数据的数据类型定义、索引优化、查询优化策略-CSDN博客

相关文章:

【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响

注&#xff1a;使用postgresql数据库会用到PostGIS 扩展。 一、安装PostGIS 扩展 在 PostgreSQL 中遇到错误 “type geography does not exist” 通常意味着你的 PostgreSQL 数据库还没有安装 PostGIS 扩展&#xff0c;或者 PostGIS 扩展没有被正确地安装在你的数据库中。geo…...

设计模式应用

单例模式 RunTime类是单例模式的体现&#xff0c;getRunTime()方法会返回一个唯一的实例。确保程序中只有一个唯一的RunTime类对象建造者模式 StringBuilder和StringBuffer是建造者模式的体现工厂模式 Calender类中Calender.getInstance()方法 DriverManager.getConnection()方…...

Android开机启动流程

Android开机启动流程 systemReady启动"added application" frameworks/base/services/java/com/android/server/SystemServer.java mainnew SystemServer().run();startBootstrapServicesmActivityManagerService ActivityManagerService.Lifecycle.startService(…...

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存&#xff08;存储&#xff09; 1.2、研究目的 如何存储数据&#xff08;变量&#xff0c;数组....)程序数据结构算法 1.3、常见保存数据的方法 数组&#xff1a;保存自己的数据指针&#xff1a;是间接访问已经存在的…...

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路&#xff0c;我们用栈来存1234.....&#xff0c;队列来存输入的一组数据&#xff0c;栈与队列进行匹配&#xff0c;相同就pop 机翻 1、条件准备 stk是栈&#xff0c;que是队列。 tt指向的是栈中下标&#xff0c;fr…...

java开发,记录一些注解和架构 pojo、entity、respository

最近接了一个项目&#xff0c;说是项目其实也不算是项目&#xff0c;因为是把这个项目赛到其他项目中的。 熟悉一些这个项目的功能&#xff0c;梳理了一下&#xff0c;在代码开发中主要关心pojo、entity、respository、controller、service。 在这里主要记录前3个的流程与作用…...

MatLab基础学习01

MatLab基础学习01 1.基础入门2.MatLab的数据类型2.1数字2.2字符串2.3矩阵2.4.元胞数组2.5结构体 3.MatLab的矩阵的操作3.1矩阵定义与构造3.2矩阵的下标取值 4.MatLab的逻辑流程4. For循环结构4.2 While循环&#xff0c;当条件成立的时候进行循环4.3 IF end 1.基础入门 matlba必…...

第 5 章多视图几何

本章讲解如何处理多个视图&#xff0c;以及如何利用多个视图的几何关系来恢复照相机位置信息和三维结构。通过在不同视点拍摄的图像&#xff0c;我们可以利用特征匹配来计算出三维场景点以及照相机位置。本章会介绍一些基本的方法&#xff0c;展示一个三维重建的完整例子&#…...

IOS 开发者账号注册流程

注册步骤 准备资料 营业执照 法人信息&#xff08;电话、身份证信息&#xff09; 注册邮箱&#xff08;公司邮箱&#xff09; 开发者信息&#xff08;电话、身份证信息、邮箱&#xff09;1. 注册AppleID 注册地址&#xff1a; https://appleid.apple.com/account 填写表单信…...

netty之NioEventLoop和NioEventLoopGroup

类结构图 NioEventLoopGroup #mermaid-svg-5g1iVjr5oyhqXK92 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5g1iVjr5oyhqXK92 .error-icon{fill:#552222;}#mermaid-svg-5g1iVjr5oyhqXK92 .error-text{fill:#55222…...

睿考网:中级经济师考试题型有哪些?

中级经济师考试时间在每年的11月份&#xff0c;2024年考试时间定于11月16-17日&#xff0c;考试科目为《经济基础知识》与《专业知识与实务》两科。 《专业知识与实务》有10个专业&#xff0c;分别是工商管理、知识产权、农业经济、财政税收、金融、保险、运输经济、人力资源管…...

kubernetes集群部署Confluence 7.2.0+mysql 5.7(自测有效)

背景介绍&#xff1a; Confluence是一个专业的企业知识管理与协同软件。使用简单&#xff0c;但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论&#xff0c;信息推送。 这里介绍的使用的是Confluence 7.2.0版本的。 一、在kubernetes集群部署 1…...

Vmware ubuntu22.04 虚拟机 连接Windows主机虚拟串口

1. Windows虚拟串口配置 虚拟串口下载&#xff1a;虚拟串口 VSPD 的使用_vspd使用教程-CSDN博客 虚拟串口使用&#xff1a;使用虚拟串口在一台电脑上模拟串口通讯_pc怎么模拟一主多从串口-CSDN博客 2. ubuntu虚拟串口配置 Vmware ubuntu22.04 虚拟机 连接windows主机虚拟串口…...

Postgresql碎片整理

创建pgstattuple 扩展 CREATE EXTENSION pgstattuple 获取表的元组&#xff08;行&#xff09;信息&#xff0c;包括空闲空间的比例和行的平均宽度 SELECT * FROM pgstattuple(表名); 查看表和索引大小 SELECT pg_relation_size(表名), pg_relation_size(索引名称); 清理碎片方…...

【最新华为OD机试E卷-支持在线评测】字母组合(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

力扣493.翻转对

class Solution {public static int MAXN 50001;public static int[] help new int[MAXN];public static void main(String[] args) {}public static int reversePairs(int[] arr) {return counts(arr, 0, arr.length - 1);}//统计l …… r上反转对的数量&#xff0c;同时计算…...

潜望长焦+快充:vivo X200系列,小尺寸手机的大突破

在智能手机市场日益激烈的竞争中&#xff0c;厂商们不断推陈出新&#xff0c;以满足消费者多样化的需求。vivo作为中国知名的智能手机品牌&#xff0c;一直以其创新的设计和强大的功能赢得市场的认可。 近日&#xff0c;vivo X200系列的即将发布引起了广泛关注&#xff0c;特别…...

Stable Diffusion训练LoRA模型参数详细说明(阿里巴巴堆友AI)

工具&#xff1a;线上模型训练堆友AI 一、训练参数 批量大小 (Batch Size) 作用&#xff1a;每次训练中使用的样本数量。参考值&#xff1a;可以从 8 到 64&#xff0c;取决于显存大小。 训练轮数 (Epochs) 作用&#xff1a;完整遍历训练数据的次数。参考值&#xff1a;通…...

Learn ComputeShader 12 Setting up a buffer-based particle effect

unity有自己的粒子系统&#xff0c;但是这次我们要尝试创建一个我们自己的粒子系统&#xff0c;而且使用计算着色器有下面这些好处。总而言之&#xff0c;计算着色器适合处理大规模的数据集。例如&#xff0c;能够高效地处理数万个甚至数百万个粒子的计算。这对于粒子系统这样的…...

【STL中容器汇总】map、list、vector等详解

容器学习分享 1、STL简介1.1、STL六大组件 2、vector容器2.1、vector 基本操作2.2、vector容器示例2.3、vector容器存放自定义数据类型示例2.3、vector嵌套vector示例 3、list 容器3.1使用示例3.2、list容器基本函数 4、map容器4.1、map函数原型4.2、map函数示例 1、STL简介 ST…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...