Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Cách làm cho khách hàng tải xuống một tệp rất lớn được tạo ra một cách nhanh chóng

Xuất Excel:

Sử dụng Luồng. Sau đây là một ý tưởng sơ bộ về những gì có thể được thực hiện:

  1. Sử dụng mô-đun exceljs. Bởi vì nó có một API phát trực tuyến nhằm giải quyết vấn đề chính xác này.

    var Excel = require('exceljs')
    
  2. Vì chúng tôi đang cố gắng bắt đầu tải xuống. Viết các tiêu đề thích hợp để phản hồi.

    res.status(200);
    res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls');
    res.setHeader('Content-type', 'application/vnd.ms-excel');
    
  3. Tạo một sổ làm việc được hỗ trợ bởi Streaming Excel writer. Luồng được cung cấp cho người viết là phản hồi của máy chủ.

    var options = {
        stream: res, // write to server response
        useStyles: false,
        useSharedStrings: false
    };
    
    var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
    
  4. Bây giờ, luồng phát trực tuyến đầu ra đã được thiết lập xong. đối với luồng đầu vào, hãy thích một trình điều khiển DB cung cấp kết quả truy vấn / con trỏ dưới dạng một luồng.

  5. Xác định hàm không đồng bộ kết xuất 1 bảng thành 1 trang tính.

    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. Bây giờ, hãy xuất một số bảng db, sử dụng bản đồ của mô-đun không đồng bộSeries:

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

Xuất CSV:

Để xuất CSV của một bảng / mô-đun bộ sưu tập, có thể sử dụng fast-csv:

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

Bạn hiện đang truyền dữ liệu từ DB sang phản hồi HTTP, chuyển đổi dữ liệu đó thành định dạng xls / csv một cách nhanh chóng. Không cần phải đệm hoặc lưu trữ toàn bộ dữ liệu trong bộ nhớ hoặc trong tệp.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. django:redis:CommandError:Bạn chưa đặt ASGI_APPLICATION, cần thiết để chạy máy chủ

  2. redis-cli đã chuyển hướng đến 127.0.0.1

  3. Làm thế nào để cấu hình kết nối Redis với Rails 4, Puma và Sidekiq?

  4. Làm cách nào để triển khai tính năng hết thời gian chờ pubsub của redis?

  5. Redis - Thúc đẩy nô lệ làm chủ theo cách thủ công