希望这个问题不是太多开放式的……简而言之:我正在寻找一种脚本或编程语言,它可以快速但轻松地访问数据库(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
可能确实值得改变。;-)