从PostgreSQL数据库中有效地检索大型数据对象

时间:2016-07-14 21:43:01

标签: database postgresql jdbc gis postgis

我目前正在尝试找到一种更有效地从PostgreSQL / PostGIS数据库中读取大型几何对象的方法。我已经分析了我的查询计划和运行时间,如果我只撤回主键是非常可接受的,但是当我检索 - 有时非常大 - 几何对象时,返回时间可以进入单个查询的分钟

我想知道是否有更有效的方法从数据库中读取大型对象,除了一个典型的查询(也许某种流式传输,我可以在检索它时处理输入,以减少有效处理时间?)。我已经查看了游标,但我不确定这是否正是我正在寻找的,因为这些似乎主要与PL / pgsql脚本相关而不是Java应用程序。

我正在运行PostgreSQL 9.5,应用程序是用Java / Scala编写的,并使用JDBC。任何帮助表示赞赏。

编辑 - 我还应该补充一点,数据库是运行应用程序的机器的本地数据库。

1 个答案:

答案 0 :(得分:1)

你应该检查Postgres在哪个阶段花费最多的时间:

  • 执行查询

  • 从硬件中恢复数据

  • 通过网络发送数据

如果您检索大量数据,那么在通过网络发送数据时可能会花费大量时间。 我从来没有试过这个,但也许你可以使用Postgresql SSLCompresion选项:

  

如果设置为1(默认值),则将压缩通过SSL连接发送的数据(这需要OpenSSL 0.9.8或更高版本)。如果设置为0,将禁用压缩(这需要OpenSSL 1.0.0或更高版本)。如果没有建立SSL的连接,或者使用的OpenSSL版本不支持,则忽略此参数。   压缩使用CPU时间,但如果网络是瓶颈,则可以提高吞吐量。如果CPU性能是限制因素,禁用压缩可以缩短响应时间和吞吐量。

[https://www.postgresql.org/docs/9.2/static/libpq-connect.html]