Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

क्लाइंट को एक बहुत बड़ी फ़ाइल डाउनलोड करने के लिए कैसे तैयार किया जाए जो फ्लाई पर उत्पन्न होती है

एक्सेल निर्यात:

धाराओं का प्रयोग करें। क्या किया जा सकता है इसका एक मोटा विचार निम्नलिखित है:

  1. एक्सेलज मॉड्यूल का प्रयोग करें। क्योंकि इसमें इस सटीक समस्या के लिए एक स्ट्रीमिंग एपीआई है।

    var Excel = require('exceljs')
    
  2. चूंकि हम एक डाउनलोड शुरू करने की कोशिश कर रहे हैं। प्रतिक्रिया के लिए उपयुक्त शीर्षलेख लिखें।

    res.status(200);
    res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls');
    res.setHeader('Content-type', 'application/vnd.ms-excel');
    
  3. स्ट्रीमिंग एक्सेल लेखक द्वारा समर्थित एक कार्यपुस्तिका बनाएं। लेखक को दी गई स्ट्रीम सर्वर प्रतिक्रिया है।

    var options = {
        stream: res, // write to server response
        useStyles: false,
        useSharedStrings: false
    };
    
    var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
    
  4. अब, आउटपुट स्ट्रीमिंग फ्लो पूरी तरह से सेट हो गया है। इनपुट स्ट्रीमिंग के लिए, एक डीबी ड्राइवर को प्राथमिकता दें जो एक स्ट्रीम के रूप में क्वेरी परिणाम/कर्सर देता है।

  5. एक एसिंक फ़ंक्शन को परिभाषित करें जो 1 टेबल को 1 वर्कशीट में डंप करता है।

    var tableToSheet = function (name, done) {
        var str = dbDriver.query('SELECT * FROM ' + name).stream();
        var sheet = workbook.addWorksheet(name);
    
        str.on('data', function (d) {
            sheet.addRow(d).commit(); // format object if required
        });
    
        str.on('end', function () {
            sheet.commit();
            done();
        });
    
        str.on('error', function (err) {
            done(err);
        });
    }
    
  6. अब, async मॉड्यूल की mapSeries का उपयोग करके कुछ db तालिकाओं को निर्यात करने देता है:

    async.mapSeries(['cars','planes','trucks'],tableToSheet,function(err){
       if(err){
         // log error
       }
       res.end();
    })
    

सीएसवी निर्यात:

एक टेबल/संग्रह मॉड्यूल के सीएसवी निर्यात के लिए फास्ट-सीएसवी का उपयोग किया जा सकता है:

// response headers as usual
res.status(200);
res.setHeader('Content-disposition', 'attachment; filename=mytable_dump.csv');
res.setHeader('Content-type', 'text/csv');

// create csv stream
var csv = require('fast-csv');
var csvStr = csv.createWriteStream({headers: true});

// open database stream
var dbStr = dbDriver.query('SELECT * from mytable').stream();

// connect the streams
dbStr.pipe(csvStr).pipe(res);

अब आप डेटा को डीबी से एचटीटीपी प्रतिक्रिया में स्ट्रीम कर रहे हैं, इसे फ्लाई पर एक्सएलएस/सीएसवी प्रारूप में परिवर्तित कर रहे हैं। मेमोरी या फ़ाइल में संपूर्ण डेटा को बफर या स्टोर करने की आवश्यकता नहीं है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nestjs redis microservice का उपयोग कैसे करें?

  2. लिखने के पैमाने के रूप में लगातार हैशिंग

  3. रेडिस स्ट्रीम सभी उपलब्ध मेमोरी का उपयोग कैसे करती है?

  4. एरोस्पाइक अन्य की-वैल्यू नोस्कल डेटाबेस से कैसे भिन्न है?

  5. Redis के साथ विलंबित निष्पादन/शेड्यूलिंग?