Вопрос проверяет понимание подходов к обработке тяжелых операций в разных контекстах.
В Node.js для тяжелых операций используйте асинхронную обработку, потоки и очередь задач. Для SQL-запросов оптимизируйте запросы, добавляйте индексы и используйте пагинацию. В обоих случаях важно не блокировать event loop и эффективно использовать ресурсы.
Обработка тяжелых операций требует разных подходов в зависимости от контекста.
В Node.js:
Использование потоков (Streams) для обработки больших файлов:
const fs = require('fs');
const readStream = fs.createReadStream('largefile.mp4');
const writeStream = fs.createWriteStream('copy.mp4');
readStream.pipe(writeStream);Очереди задач (например, с Bull или RabbitMQ):
// Добавление задачи в очередь
queue.add('process-video', { videoId: 123 });Worker threads для CPU-intensive операций:
const { Worker } = require('worker_threads');
const worker = new Worker('./video-processor.js');
worker.postMessage(videoData);В SQL:
Оптимизация запросов:
Добавление индексов на часто используемые поля
Избегание N+1 запросов
Использование EXPLAIN для анализа запросов
Пагинация для больших результатов:
SELECT * FROM large_table
ORDER BY id
LIMIT 100 OFFSET 200;Пакетная обработка для больших операций:
-- Вместо одного большого UPDATE
UPDATE large_table SET status = 'processed'
WHERE id BETWEEN 1 AND 1000;Общие принципы:
Не блокируйте event loop
Используйте асинхронные операции
Мониторьте производительность