Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana membuat klien mengunduh file yang sangat besar yang dihasilkan dengan cepat

Ekspor Excel:

Gunakan Aliran. Berikut adalah gambaran kasar tentang apa yang mungkin dilakukan:

  1. Gunakan modul exceljs. Karena memiliki API streaming yang ditujukan untuk masalah ini.

    var Excel = require('exceljs')
    
  2. Karena kami mencoba memulai unduhan. Tulis tajuk yang sesuai untuk tanggapan.

    res.status(200);
    res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls');
    res.setHeader('Content-type', 'application/vnd.ms-excel');
    
  3. Buat buku kerja yang didukung oleh penulis Streaming Excel. Aliran yang diberikan kepada penulis adalah respons server.

    var options = {
        stream: res, // write to server response
        useStyles: false,
        useSharedStrings: false
    };
    
    var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
    
  4. Sekarang, aliran streaming keluaran sudah siap. untuk streaming input, pilih driver DB yang memberikan hasil kueri/kursor sebagai aliran.

  5. Tentukan fungsi asinkron yang membuang 1 tabel ke 1 lembar kerja.

    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. Sekarang, mari ekspor beberapa tabel db, menggunakan mapSeries modul async:

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

Ekspor CSV:

Untuk ekspor CSV dari satu tabel/modul koleksi fast-csv dapat digunakan:

// 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);

Anda sekarang mengalirkan data dari DB ke respons HTTP, mengubahnya menjadi format xls/csv dengan cepat. Tidak perlu buffer atau menyimpan seluruh data dalam memori atau dalam file.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menyimpan nilai kembalian node.js setTimeout di redis

  2. Migrasi phpRedis ke cluster dan hashing yang konsisten

  3. Menghubungkan ke Redis yang berjalan di Docker Container dari mesin Host

  4. Sistem belum di-boot dengan systemd sebagai sistem init (PID 1). Tidak bisa beroperasi

  5. Redis menghubungkan ECONNREFUSED 127.0.0.1:6379