希望这个问题不是太多开放式的……简而言之:我正在寻找一种脚本或编程语言,它可以快速但轻松地访问数据库(PostgreSQL
)。
我想使用对数据库中某些表的查询结果PostgreSQL
作为某些R
分析的输入。查询是简单的SELECT
请求(请求中可能有改进的空间,但现在我不是这样看的——我前一段时间已经这样做了),而是在第一个查询结果的循环中。表包括数字和字符串,并且有数千行甚至数十万行,因此查询的总数可能非常大。
显然,我首先R
使用RPostgreSQL
. 但是,使用起来需要太多时间(我希望能够随时修改和重新运行它)。我已经非常有效地优化了这个脚本,''system.time'' 告诉我大部分时间都花在了循环中的数据库查询上。
然后,当我发现如果我使用文本文件作为 的输入会更快R
,我决定将此R
脚本翻译成python
,使用psycopg2
. 不幸的是,python
脚本并不比R
脚本快多少。
最后我开始使用 编写一个C++
程序libpq-fe
,但我发现它不够灵活而停止了(我的意思是,我必须将我的代码行数至少乘以 3 或 4 才能处理查询) .
因此,我想知道哪种语言(或者其他语言R
或python
库?)将为数据库访问(即)提供速度和灵活性之间的最佳折衷(就查询结果而言:列表、数组、字符串操作…… PostgreSQL
)。也就是说,它需要比R
+RPostgreSQL
和python
+快得多psycopg2
,并且几乎要“灵活”。
感谢您的建议(语言必须是 linux 友好的)。
更新:这是旧代码与新代码的典型时序,仅使用前 500 个检索到的元素,在N+1
按照 Ryan 的建议更正了问题的代码之后:
> system.time(source("oldcode.R"));
user system elapsed
3.825 0.052 49.363
> system.time(source("newcode.R"));
user system elapsed
1.920 0.140 3.551
1000 个第一个检索到的元素也是如此:
> system.time(source("oldcode.R"));
user system elapsed
9.816 0.092 100.340
> system.time(source("newcode.R"));
user system elapsed
5.040 0.072 6.695
可能确实值得改变。;-)