0

MongoDB からデータを読み取って変換し、ファイルとしてリモート SFTP サーバーに配置する必要があります。DB 内のドキュメントは非常に大きいため、これをストリームとして実行しようとしています。機能するソリューションがありますが、あまり効率的ではありません。それを改善する方法についてのアイデアに感謝します。これまでの動作は次のとおりです。

  1. Mongo からデータをストリームとして読み取る
const aggregationStream = mongoConnection.db.collection.aggregate.stream();
  1. 新しい変換ストリームを作成して、データを操作します
const csvStream = new Transform({ ... some csv transformation });
  1. 両方のストリームをパイプしますrequire('util').promisify(stream.pipeline)
await streamPipeline(
  aggregationStream,
  csvStream,
);

これまでのところ、すべてがうまく機能しています。

  1. データを SFTP に送信します。
await sftp.connect();
await sftp.put(csvStream, targetPath, { encoding: null });

そして、ここに問題があります。私は Mongo と変換の間でストリームを利用していますが、ストリームはストリームとして SFTP にさらに進むことはありません。代わりに、すべてのオブジェクトが Mongo から変換ストリームに送信されるまで待機し、csvStream が Mongo データの変換を終了した後にのみ SFTP への書き込みを開始します。データ mongo -> 変換 -> sftp をすぐにストリーミングする方法のアイデアが必要です。

4

0 に答える 0