2016-12-25 7 views
2
の大きなディレクトリディレクトリ

私はそこに数百万のjsonファイルを持つ単一のディレクトリを持っています。私は最終的に、ディレクトリ内の各ファイルを繰り返し処理し、読み込み、情報で何かを行い、そしてデータベースに何かを書きたいと思っています。fs.readdirSyncの代わりにノード

私のスクリプトは、数百のファイルを含むテストディレクトリを使用すると完全に動作します。しかし、実際のディレクトリを使用すると、それは停止します。何かがとにかく起こることができる前に、私は、ファイル名を必要とするので、何も役に立たない非同期機能にこれを変換する

fs.readdirSync('my dir path') 

:私は強く、私はの使用に問題を正確に指摘していると信じています。しかし、私は、この操作がハングするという考えは、ディレクトリ全体を読み取るのに「時間がかかりすぎる」ためです。ここでは参考のため

は、機能の広い部分である:

function traverseFS(){ 
    var path = 'my dir name and path'; 
    var files = fs.readdirSync(path); 
    for (var i in files) { 
     path + '/' + files[i]; 
     var fileText = fs.readFileSync(currentFile,'utf8'); 
     var json= JSON.parse(fileText); 
     if(json) 
      // do something 
    } 
} 

私の質問のいずれかです:

  1. は、私は、これはreaddirSyncを使用して仕事を得る行うことができます何かがありますか?
  2. 別の操作を使用する必要がありますか?あなたはディレクトリのリストを作成し、またはは、(* nixの上)scandir()に結合する独自のストリーミングを書くことを解析し、子プロセスを(最も簡単)を使用および/または任意の同等は、Windows上でどちらかに必要があるだろう
+0

なぜ同期読み取りが必要ですか?その要件を緩和することは可能ですか?一度に読む必要のあるデータを分割することは可能ですか?接頭辞や日付などでディレクトリの名前を変更できますか?パスはディレクトリだけで構成され、100万のファイルすべてではありません。 – dm03514

+0

私は同期読み取りを必要としませんが、私はそれが非同期は役に立たないと言ったように。私は本当にむしろデータを分割しないだろう。これは、Windowsの多くのファイルを操作することが地獄なので、鶏肉や卵の問題のようなものです。これらは素晴らしいアイデアです。しかし、彼らは本当に私の2つの具体的な問題に対処していません。 – COMisHARD

答えて

0

それを使用してください。後者については、libuvコード(*nixWindows)をガイドとして使用することをお勧めします。