2016-05-25 16 views
2

私はverticaにテーブルを定義せずにjsonをロードするためにvertica flexテーブルを使用していますが、ロード時間に問題があります。私はJDBCドライブで私にVerticaに接続し、このコードを使用VerticaCopyStreamは非常に遅い

..

String copyQuery = "COPY schema.tablename FROM STDIN PARSER fjsonparser()"; 
VerticaCopyStream vstream = new VerticaCopyStream((VerticaConnection)conn, copyQuery); 
InputStream input; 
vstream.start(); 
for(JsonNode json : jsonList){ 
    input = new ByteArrayInputStream(json.toString().getBytes()); 
    vstream.addStream(input); 
    input.close(); 
} 
vstream.execute(); 
vstream.finish(); 

コマンド「vstream.execute()は、」5000 jsonsために12秒かかりますが、私は、ファイルからCOPYコマンドを使用するときに1秒未満で実行されます。

+0

高速で実行されるCOPYコマンドの場合。あなたはバーチカの断絶者からそれを走らせましたか? – elirevach

+0

いいえ、私は私のローカルコンピュータから実行します。テキストファイルを使ってサーバーからCOPYコマンドを実行すると、1秒未満で実行されます。 – royb

+0

明確にするためです。あなたのコピーコマンドテストはcsvファイルで行い、VerticaCopyStreamはjsonであるか、または両方ともjsonですか? – elirevach

答えて

0

あなたの問題はVerticaCopyStreamではなく、問題はあなたが使用した別のパーサに関してです。リンゴとリンゴを比較する必要があります。JSONパーサーは単純なCSVパーサーよりも遅くなければなりません。

+0

からCOPYコマンドを使用して、それが真であることを遅らせることです! =( – royb

+0

あなたのコメントについては確信していません。ちょうどCSVでjsonファイルの長さを入力してください。ネットワークオーバーヘッドと余分な解析について考えてみましょう。 – elirevach

0

あなたはそれが問題にクライアントから

0

COPY FROM STDINCOPY LOCALストリームデータを解くVSQL useingでSAMRインサートを実行する場合。 COPY(LOCALまたはSTDINなし)だけでサーバー上で実行すると、ネットワーク遅延なしで直接Verticaデーモンから直接ロードされます(ローカルディスクであり、NASではなく)。

さらに、ByteArrayInputStreamを元に戻す方法では、jsonListをInputStreamに変換して、すべての項目の入力ストリームを作成する代わりに、そのストリームを渡す方が良いでしょうか?