首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有快速和灵活(PostgreSQL)数据库访问的语言?

具有快速和灵活(PostgreSQL)数据库访问的语言?
EN

Stack Overflow用户
提问于 2012-08-07 22:25:01
回答 1查看 447关注 0票数 2

希望这个问题不是太多的开放式…。简单地说:我正在寻找一种脚本或编程语言,可以快速但容易地访问数据库(PostgreSQL)。

我希望使用PostgreSQL数据库中某些表的查询结果作为R分析的输入。查询是简单的SELECT请求(请求中可能有改进的空间,但目前我并不是这样看的--不久前我已经这样做了),但是在第一个查询结果的循环中。表包括数字和字符串,如果不是几十万行,则是数千行,因此查询的总数可能相当大。

显然,我首先使用R编写了一个RPostgreSQL脚本。然而,它需要太多的时间才能舒适地使用(我希望能够随时修改和重新运行它)。我已经非常有效地优化了这个脚本,“system.time”告诉我,大部分时间都花在循环中的DB查询上。

然后,当我发现如果我使用一个文本文件作为R的输入会快得多,我决定使用psycopg2将这个R脚本转换成python。不幸的是,python脚本并不比R脚本快多少。

最后,我开始使用C++编写一个libpq-fe程序,但我发现它不够灵活(我的意思是,为了处理查询,我必须将代码的行数乘以至少3或4行)。

因此,我想知道是哪种语言(或者其他Rpython库)?将提供速度和灵活性之间的最佳折衷(就查询结果而言:列表、数组、字符串操作…)对于DB访问(即PostgreSQL)。也就是说,它需要比R+RPostgreSQLpython+psycopg2快得多,而且几乎和“灵活”一样。

谢谢你的建议(语言必须是linux友好的)。

Update:以下是仅使用前500个检索元素的新旧代码的典型计时,并按照Ryan和suggested的建议纠正了N+1问题的代码:

代码语言:javascript
复制
> 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个元素相同:

代码语言:javascript
复制
> 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 

可能真的值得一改。;-)

EN

回答 1

Stack Overflow用户

发布于 2012-08-07 22:33:24

若要使数据库的任何接口快速运行,请优化数据库查询。正如您所发现的,即使使用R优化的代码,大部分时间都是在数据库上度过的。因此,您应该选择您最熟悉和最熟悉的编程语言;因为这将是最快的编程语言,就前端而言。

然而,无论您使用哪种编程语言,总体结果(就感知性能而言)都是相同的。没有任何库可以提高查询的速度,因为这完全是数据库的一个函数。库/语言允许您将多个查询组合到单个事务中,但是查询的结果仍然取决于数据库布局和优化。

简单的事情,比如缺少列上的索引,可能会产生很大的影响。

首先在查询上运行EXPLAIN ANALYZE,然后将结果粘贴到这个工具中,以可视化数据库正在做的事情,从而知道从哪里开始优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11854998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档