簡體   English   中英

Node.js:文件太大時,fs writestream停止寫入文件

[英]Node.js: fs writestream stops writing to file when the file gets too big

我正在抓取一個包含大量數據的網頁,其格式為HTML表格。 您必須提交表單以生成表。 我的節點腳本提交了表單的所有排列,並且每次刮取結果表時,都會將每一行變成一行數據。

問題是,當我將數據寫入某個文件時,當文件大小達到10MB左右時,它將停止工作。 有時會少一些; 有時多一點。 我曾嘗試將文件編寫為.csv,.json和.txt,並且每次發生相同問題時都可以。

我正在使用fs執行此任務。 相關代碼為:

var fs = require("fs");
var stream = fs.createWriteStream("data.csv"); // can also be .json or .txt

stream.write(line_of_data);

我可以使用console.log(line_of_data)並且在整個過程中都可以正常工作,直到沒有數據可console.log(line_of_data)為止。 但是輸出文件大約只有10MB,將不再接受任何數據行。 停止點似乎幾乎完全是任意的-每次我運行腳本時,它都會停止在另一個位置進行編寫。 我的硬盤上有足夠的存儲空間,因此問題一定與其他問題有關。

我最終使用MongoDB來存儲數據。 要將MongoDB安裝為節點模塊,請運行npm install mongodb --save 相關的javascript是:

MongoClient = require("mongodb").MongoClient;
MongoClient.connect("mongodb://localhost:27017/database", function(err, db) {

  if (!err) {

    // set up mongodb collection
    db.createCollection("collection", function(err, collection) {}); 
    var collection = db.collection("collection");

    // after scraping data... 
    // insert a data object (line_of_code)
    collection.insert(line_of_data, {w: 1}, function(err, result) {
      if (err) console.log(err);
    });

  }

});

一些命令來轉換數據:

  1. 導出為CSV: mongoexport --db database --collection collection --out data.csv --type=csv --fields 'field1, field2, field3, etc.'
  2. 轉換為JSON: csvtojson data.csv > data.json (需要csvtojson
  3. 驗證JSON: jsonlint data.json (需要jsonlint

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM