MongoDB からデータを読み取って変換し、ファイルとしてリモート SFTP サーバーに配置する必要があります。DB 内のドキュメントは非常に大きいため、これをストリームとして実行しようとしています。機能するソリューションがありますが、あまり効率的ではありません。それを改善する方法についてのアイデアに感謝します。これまでの動作は次のとおりです。
- Mongo からデータをストリームとして読み取る
const aggregationStream = mongoConnection.db.collection.aggregate.stream();
- 新しい変換ストリームを作成して、データを操作します
const csvStream = new Transform({ ... some csv transformation });
- 両方のストリームをパイプします
require('util').promisify(stream.pipeline)
await streamPipeline(
aggregationStream,
csvStream,
);
これまでのところ、すべてがうまく機能しています。
- データを SFTP に送信します。
await sftp.connect();
await sftp.put(csvStream, targetPath, { encoding: null });
そして、ここに問題があります。私は Mongo と変換の間でストリームを利用していますが、ストリームはストリームとして SFTP にさらに進むことはありません。代わりに、すべてのオブジェクトが Mongo から変換ストリームに送信されるまで待機し、csvStream が Mongo データの変換を終了した後にのみ SFTP への書き込みを開始します。データ mongo -> 変換 -> sftp をすぐにストリーミングする方法のアイデアが必要です。