Java >> Java チュートリアル >  >> Tag >> Jdbc

clojureを使用してpostgres dbにファイルレコードを挿入するjdbcは、python psycopg2と比較して時間がかかります

おそらく、Clojure バージョンでバッチ処理を使用していないことが原因です。コミットをトリガーする行を 1 つずつ挿入します。

partition する必要があるよりも Clojure でやりたい場合 CSV ファイルからの行と insert! 各チャンクを 1 つのバッチ コミットとして。複数の col-val-vec を受け入れる最後のアリティ バージョンを使用する必要があります 秒。サンプル コード (アイデアを示すためだけに、チェックしていません):

(defn row->col-spec [row]
  [(v 0) (v 1) (v 2) (str<->int (v 3))])

(with-open [csv-file (reader "/path/to/foo.txt")]
  (try
    (->> csv-file
         (clojure-csv.core/parse-csv)
         (map row->col-spec)
         (partition 50)
         (map (fn [batch] clojure.java.jdbc/insert! db :records ["col1" "col2" "col3" "col4"] batch))
         (dorun))
    (catch Exception e
      (println e))))

Clojure で行う必要がない場合は、psql を使用します。 の COPY コマンドが最も簡単で最速のオプションのようです:

COPY records FROM '/path/to/foo.txt' WITH (FORMAT csv, DELIMITER ',',  NULL 'NULL');

Java タグ