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

时间:2012-08-07 22:25:01

标签: database postgresql programming-languages

希望这个问题不是太开放......简而言之:我正在寻找一种快速但易于访问数据库的脚本或编程语言(PostgreSQL)。

我希望将PostgreSQL数据库中某些表的查询结果用作某些R分析的输入。查询是简单的SELECT请求(请求中可能存在改进的空间,但是现在我不是这样看的 - 我已经做过一段时间了),但是在第一次查询结果的循环中。表包括数字和字符串,如果不是数十万行,则数千个,因此查询总数可能非常大。

显然,我首先使用R编写了RPostgreSQL脚本。但是,使用起来需要花费太多时间(我希望能够随时修改并重新运行)。我已经非常有效地优化了这个脚本,''system.time''告诉我,大部分时间花在循环中的数据库查询上。

然后,正如我所知,如果我使用文本文件作为R的输入会更快,我决定将此R脚本翻译为python,使用{{ 1}}。不幸的是,psycopg2脚本并不比python脚本快得多。

最后我开始使用R编写C++程序,但我停下来,因为我发现它不够灵活(我的意思是,我必须乘以我的代码行数)通过至少3或4来处理查询。)

因此,我想知道哪种语言(或者可能是其他libpq-feR库?)会在速度和灵活性之间提供最佳折衷(就查询结果而言:列表,数组,字符串操作) ...)用于数据库访问(即python)。也就是说,它需要比PostgreSQL + RRPostgreSQL + python快得多,而且几乎就像“灵活”一样。

感谢您的建议(该语言必须是Linux友好的)。


更新:以下是在使用Ryan建议的psycopg2问题的代码进行更正之后,仅使用前500个检索到的元素的旧代码与新代码的典型时间,并且:

N+1

1000个第一个检索到的元素相同:

> 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 

可能确实值得改变。 ; - )

1 个答案:

答案 0 :(得分:2)

使数据库的任何接口快速进行;优化数据库查询。正如您使用R发现的优化代码所发现的那样,大部分时间都花在数据库上。所以你应该选择你最熟悉和最熟悉的编程语言;因为就前端而言,这是最快的。

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

诸如列上缺少索引之类的简单事情会产生很大的影响。

首先在查询上运行EXPLAIN ANALYZE,然后将结果粘贴到this tool,以查看数据库正在执行的操作,以便了解从何处开始优化。