我々は、約500Kの要素で(xml-stream
を使用して)XMLファイルを読み込むと、このようにMongoDBに挿入して行うのです:node.jsの切断時にMongoDBの挿入をバッファリングするには?
xml.on(`endElement: product`, writeDataToDb.bind(this, "product"));
挿入writeDataToDb(type, obj)
には、次のようになります
collection.insertOne(obj, {w: 1, wtimeout: 15000}).catch((e) => { });
モンゴ接続が切断され、xmlストリームが読み込まれ、コンソールにエラーメッセージが表示されます(挿入できない、切断された、EPIPEが壊れている、など)。
はdocsではそれは言う:あなたはのmongodプロセスをシャットダウン
、ドライバが処理操作を停止し、原因であること-1すべての操作のバッファを意味し、デフォルトでbufferMaxEntriesにそれらをバッファリングし続けます。
このバッファは実際に何をしていますか?
データを挿入してmongoサーバーを閉じると、バッファが取得され、次にmongoサーバーがバックアップされ、ネイティブドライバーは正常に再接続し、ノードはデータの挿入を再開しますが、 )が再び挿入されることはありません。
私はこのバッファとその使用方法に疑問を持ちます。
目標:
我々はMongoのは(wtimeout
による15000millisecondsに)戻ってくるまで、バッファ内のインサートを維持するための最良の方法を探して、その後、バッファリングされた文書を挿入したり、xml.pause();
とxml.resume()
を活用してみましょうされています私たちは成功しなかった。
基本的には、データの消失や割り込みなしで切断を処理する方法について少し助けが必要です。
、XML-stream'は月に一度、バッファオブジェクトを挿入し、 '使用してドキュメントやテストの例の両方を、これを複製することはできませんgoサーバがバックアップされています。もっとコードを投稿したり、あなたの設定に関するいくつかの情報をもっと与えることはできますか? – cviejo
@cviejoスクリプトは会社に関連しているので共有できませんが、これを複製しようとしたスクリプトを送ってもらえますか?要点/ペーストビンは大丈夫でしょう。 – DanFromGermany