我目前正在尝试找到一种更有效地从PostgreSQL / PostGIS数据库中读取大型几何对象的方法。我已经分析了我的查询计划和运行时间,如果我只撤回主键是非常可接受的,但是当我检索 - 有时非常大 - 几何对象时,返回时间可以进入单个查询的分钟
我想知道是否有更有效的方法从数据库中读取大型对象,除了一个典型的查询(也许某种流式传输,我可以在检索它时处理输入,以减少有效处理时间?)。我已经查看了游标,但我不确定这是否正是我正在寻找的,因为这些似乎主要与PL / pgsql脚本相关而不是Java应用程序。
我正在运行PostgreSQL 9.5,应用程序是用Java / Scala编写的,并使用JDBC。任何帮助表示赞赏。
编辑 - 我还应该补充一点,数据库是运行应用程序的机器的本地数据库。
答案 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]