【问题标题】:Queries in RPostgreSQL are very slowRPostgreSQL 中的查询非常慢
【发布时间】:2023-03-17 08:18:01
【问题描述】:

目前,我正在使用对 PostgreSQL 数据库的多个查询(主要是 SELECT 和 INSERT 语句)构建一个闪亮的应用程序。该应用程序有效,但我正在努力使其更快。当我比较使用 RPostgreSQL 包和像 Postico 这样的 db 客户端的同一查询之间的执行时间时,使用 RPostgreSQL 包需要多 8 倍的时间。

对提高性能或从 R 连接到 PostgreSQL 数据库的方法有任何想法吗?

谢谢

【问题讨论】:

  • 我不确定这里是否有足够的信息来为您解决问题。您的数据管道可能存在很多差异。你有一个可重复的例子吗?您是否尝试过其他 R 库,例如 odbc?您可以将它与 postgres 驱动程序一起使用,它应该会快得多(至少比 RODBC 快得多)。
  • 你能提供一些可重现的东西吗?说一个调用 psql 的 shell 脚本来创建一个表,插入一些日期,然后是一些定时操作,将 RPostgreSQL(它使用与其他 Postgres 前端相同的 C 库......)与 Postico 等进行比较?
  • 你可以试试RPostgres
  • 感谢@Scarabee,RPostgres 包至少比 RPostgreSQL 快 50%。另一方面,我们还开发了一个外部 python API 来进行查询并将它们返回给 R,当我们有结果时我会更新这个线程

标签: r postgresql shiny rpostgresql


【解决方案1】:

您是否听说过 dbplyr 包(带有 b)?

我会推荐它,因为这个包可以让您的 dplyr(没有 b)与 SQL 数据库一起使用。

由于您与数据库交互的方式会发生变化,因此有很多优势

由此而来:

对此:

这些图片摘自 Edgar Ruiz (2017) 题为 “Databases using R” 的精彩文章。您应该查看HERE 了解更多详情。

Ruiz 先生提出的主要优点是,我引用:

" 1) 对所有数据进行数据探索 - 我们可以专注于分析数据库中的数据,而不是制定计划来决定要导入哪些数据,这反过来应该会产生更快的洞察力。

2) 使用 SQL 引擎运行数据转换 - 实际上,我们正在将计算推送到数据库,因为 dplyr 正在向数据库发送 SQL 查询。

3) 收集目标数据集 - 在熟悉数据并选择将要共享或建模的数据点之后,可以使用最终查询仅将该数据带回 R 中的内存。

4) 你所有的代码都在 R 中! - 因为我们使用 dplyr 与数据库进行通信,所以无需更改语言或工具来执行数据探索。 "

因此,您可能会通过 dbplyr/dplyr 获得所需的速度。

你应该试一试。

您可以在以下位置找到有关它以及如何使用 DBI 包与您的 PostgreSQL 服务器建立连接的更多信息:

https://cran.r-project.org/web/packages/dbplyr/vignettes/dbplyr.html

https://rviews.rstudio.com/2017/05/17/databases-using-r/

【讨论】:

  • 这个答案与问题关系不大,除了提到 R 和 Postgres。当我阅读 OP 的问题时,他并没有要求 dbplyr 商业广告。
  • @Dirk 好吧,我没有收到 Edgar Ruiz 的任何 $$$,哈哈。 OP 正在寻求“提高性能的方法的想法”。为什么您认为 dbplyr 不能替代它?
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多