2016-03-24 8 views
1

私は大量のCSVファイルを持っています(それぞれ数百万のレコードを含んでいます)。 したがって、私はsedaを使ってマルチスレッド機能を使用します。私は50000を塊で分割し、それを処理し、jpaを使用して分割してDBに保持するEntityオブジェクトのListを取得します。当初、私はヒープメモリ例外の例外を取得していました。しかし後で私は高設定システムを使用し、ヒープの問題は解決されました。csvから重複した値がApache Camelを使用してDBに挿入されます

しかし、今問題は、DBに重複レコードが挿入されていることです。たとえば、csvに1000000レコードがある場合、約2000000レコードがDBに挿入されています。 Csvファイルのレコードの主キーはありません。だから私はそれのための主キーを生成するために休止状態を使用しています。

以下は私のコードである(来た-のcontext.xml)

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
     <route> 
      <from uri="file:C:\Users\PPP\Desktop\input?noop=true" /> 
      <to uri="seda:StageIt" /> 
     </route> 


     <route> 
      <from uri="seda:StageIt?concurrentConsumers=1" /> 
      <split streaming="true"> 
       <tokenize token="\n" group="50000"></tokenize> 
       <to uri="seda:WriteToFile" /> 
      </split> 
     </route> 


     <route> 
      <from uri="seda:WriteToFile?concurrentConsumers=8" /> 

      <setHeader headerName="CamelFileName"> 
       <simple>${exchangeId}</simple> 
      </setHeader> 
      <unmarshal ref="bindyDataformat"> 
       <bindy type="Csv" classType="target.bindy.RealEstate" /> 
      </unmarshal> 
      <split> 
       <simple>body</simple> 
       <to uri="jpa:target.bindy.RealEstate"/> 
      </split> 
</route> 

助けてください。

+0

_は_「私のコードは正しいです」 - あなたは何を「正しい」に関する情報を提供していないので、私たちは知らないあなたの特定の状況です。 –

+0

こんにちはジム、私はcamel-context.xmlについて話しています。私の側から欲しいコードは他にありますか? – Sandy

+0

'RealEstate'エンティティのマッピングを投稿してください。 –

答えて

0

DB内の重複を排除するために、hibernateを使用してランダムなものを生成する代わりに、レコードの内容のハッシュからプライマリキーを作成することができます。

+0

私はそれをしたことがあるかもしれませんが、なぜラクダが重複レコードを挿入しているのかを知りたかっただけです。 csvファイルには重複がありません。 Camelは1つのレコードを複数回挿入しています。 – Sandy

+0

申し訳ありませんが、なぜそれが起こっているのか分かりません –

1

誤って2つのコンテキストを起動してルートが2回実行されることはありますか?もしあなたがどのようにルートを始めるなら?

1

「?noop = true」の問題が考えられます。これは処理中のファイルを移動しないためです。その結果、Camelはファイルを何度も繰り返し消費します。 Camelがこのファイルを.camelサブディレクトリに移動するようにこのオプションを削除しようとしましたか? Camelは、デフォルトでは、「隠し」ディレクトリにあるファイル(DOTで始まるファイル)は処理しません。予防措置として「?moveFailed = .failed」を追加することもできます。そのため、ファイルは失敗した場合でも常にディレクトリに移動されます。これが役に立ったら教えてください。

R.

+0

私もそれを試みました。しかし、それは動作しません。 – Sandy

関連する問題