願わくば、この質問があまりにも自由回答式ではないことを願っています... 一言で言えば、データベースにすばやく簡単にアクセスできるスクリプトまたはプログラミング言語を探しています ( PostgreSQL
)。
PostgreSQL
データベース内のいくつかのテーブルに対するクエリの結果を、R
分析の入力として使用したいと考えています。クエリは単純なSELECT
リクエストです (リクエストには改善の余地があるかもしれませんが、今のところ私はこのようには考えていません — 少し前に既に行っていました) が、最初のクエリの結果のループ内にあります。テーブルには数値と文字列の両方が含まれ、数十万行ではないにしても数千行になるため、クエリの総数は非常に大きくなる可能性があります。
明らかに、私は最初に をR
使用してスクリプトを作成しRPostgreSQL
ました。ただ、使いこなすには時間がかかりすぎる(いつでも修正して再実行できるようにしたい)。このスクリプトはすでに非常に効率的に最適化されており、''system.time'' を見ると、ほとんどの時間がループ内の DB クエリに費やされていることがわかります。
次に、 の入力としてテキスト ファイルを使用した方がはるかに高速であることがわかったので、R
このR
スクリプトをに変換することにpython
しpsycopg2
ました。残念ながら、python
スクリプトはスクリプトよりもはるかに高速ではありませんR
。
C++
最後に を使用してプログラムを書き始めlibpq-fe
ましたが、柔軟性が十分ではないことがわかったのでやめました (つまり、クエリを処理するには、コードの行数を少なくとも 3 または 4 倍にする必要があります)。 .
したがって、DB アクセス (つまり、リスト、配列、文字列操作など) の速度と柔軟性 (クエリの結果に関しては、リスト、配列、文字列操作など) の間で最適な妥協点を提供するのはどの言語 (または他の言語R
やライブラリでしょうか?) ではないかと考えています。つまり、+や+よりもはるかに高速で、ほぼ「柔軟」である必要があります。python
PostgreSQL
R
RPostgreSQL
python
psycopg2
提案に感謝します (言語は Linux に適している必要があります)。
N+1
更新 : これは、 Ryan と によって提案された問題のコードを修正した後、取得された最初の 500 要素のみを使用した古いコードと新しいコードの典型的なタイミングです。
> 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
おそらく実際に変更する価値があります。;-)