Разблокировка потенциала стриминга – CodesCode

Эта статья руководит вас по созданию приложения Node.js для эффективной загрузки данных в Amazon S3, включая настройку, интеграцию и хранение в базе данных.

Загрузка массовых наборов данных в Amazon S3 может быть пугающей, особенно при работе с гигабайтами информации. Однако решение находится под рукой. Мы можем революционизировать этот процесс, используя возможности потоковой передачи в Node.js TypeScript-приложении. Потоковая передача позволяет нам передавать значительные объемы данных в AWS S3 с удивительной эффективностью, сохраняя при этом ресурсы памяти и обеспечивая масштабируемость. В этой статье мы отправляемся в путешествие, чтобы раскрыть секреты разработки Node.js TypeScript-приложения, которое без проблем загружает гигабайты данных в AWS S3, используя магию потокового ввода-вывода.

Настройка Node.js приложения

Давайте начнем с настройки нового проекта Node.js:

mkdir aws-s3-uploadcd aws-s3-uploadnpm init -y

Затем установите необходимые зависимости:

npm install aws-sdk axiosnpm install --save-dev @types/aws-sdk @types/axios typescript ts-nodenpm install --save-dev @types/express @types/multer multer multer-s3

Настройка AWS SDK и Multer

В этом разделе мы настроим AWS SDK для обмена данными с Amazon S3. Убедитесь, что у вас есть ваши учетные данные AWS.

import { S3 } from 'aws-sdk';import multer from 'multer';import multerS3 from 'multer-s3';import { v4 as uuidv4 } from 'uuid';const app = express();const port = 3000;const s3 = new S3({  accessKeyId: 'ВАШ_ИДЕНТИФИКАТОР_ДОСТУПА_AWS',  secretAccessKey: 'ВАШ_СЕКРЕТ_ДОСТУПА_AWS',  region: 'ВАШ_РЕГИОН_AWS',});

Мы также настроим Multer для обработки загрузки файлов непосредственно в S3. Определите конфигурацию хранилища и создайте экземпляр промежуточного слоя загрузки.

const upload = multer({  storage: multerS3({    s3,    bucket: 'ВАШЕ_ИМЯ_BUCKET_S3',    contentType: multerS3.AUTO_CONTENT_TYPE,    acl: 'public-read',    key: (req, file, cb) => {      cb(null, `uploads/${uuidv4()}_${file.originalname}`);    },  }),});

Создание точки входа для загрузки файлов

Теперь создадим точку входа POST для обработки загрузки файлов:

app.post('/upload', upload.single('file'), (req, res) => {  if (!req.file) {    return res.status(400).json({ message: 'Файл не загружен' });  }  const uploadedFile = req.file;  console.log('Файл успешно загружен. S3 URL:', uploadedFile.location);  res.json({    message: 'Файл успешно загружен',    url: uploadedFile.location,  });});

Тестирование приложения

Для тестирования приложения вы можете использовать инструменты, такие как Postman или cURL. Убедитесь, что вы установили заголовок Content-Type в значение multipart/form-data и включите файл в тело запроса с именем поля “file”.

Выбор между хранением в базе данных и хранением в облаке

Выбор между хранением файлов в базе данных или в бакете S3 зависит от вашего конкретного случая использования и требований. Вот небольшой обзор:

Хранение в базе данных

  • Целостность данных: Идеально подходит для обеспечения целостности данных и согласованности между структурированными данными и связанными файлами благодаря ACID-транзакциям.
  • Безопасность: Предоставляет механизмы тонкой настройки контроля доступа, включая контроль доступа на основе ролей.
  • Размер файла: Подходит для небольших и средних файлов в терминах производительности и стоимости хранения.
  • Транзакционные рабочие процессы: Полезно для приложений с комплексными транзакциями, включающими как структурированные данные, так и файлы.
  • Резервное копирование и восстановление: Упрощает включение файлов в процессы резервного копирования и восстановления базы данных.

Хранение в бакете S3

  • Масштабируемость: Идеально подходит для больших файлов и эффективного хранения файлов, масштабирующегося до гигабайт, терабайт или петабайт данных.
  • Производительность: Оптимизирован для быстрого хранения и извлечения файлов, особенно для больших мультимедийных файлов или двоичных данных.
  • Эффективность стоимости: Экономически выгоден при больших объемах данных по сравнению с базами данных по конкурентоспособной цене.
  • Простота использования: Предлагает простое управление файлами, версионирование и легкую передачу через публичные или подписанные URL.
  • Сферы применения: Часто используется для хранения статических ресурсов и доставки контента, а также в качестве масштабируемого бэкэнда для загрузки файлов веб-сайтов и мобильных приложений.
  • Долговечность и доступность: Обеспечивает высокую долговечность и доступность данных, подходит для хранения критически важных данных.

Гибридный подход: В некоторых случаях метаданные и ссылки на файлы хранятся в базе данных, в то время как сами файлы хранятся в бакете S3, объединяя преимущества обоих подходов.

Выбор должен соответствовать потребностям вашего приложения, учитывая такие факторы, как размер файла, объем, требования к производительности, целостность данных, контроль доступа и ограничения бюджета.

Multer против Formidable — выбор подходящего промежуточного ПО для загрузки файлов

При разработке приложений Node.js с использованием Express выбор подходящего промежуточного ПО для загрузки файлов является важным. Давайте сравним два популярных варианта: Multer и Formidable.

Multer с Express

  • Интеграция с Express: Интегрируется без проблем с Express для легкой настройки и использования.
  • Абстракция: Предоставляет более высокий уровень абстракции для обработки загрузки файлов, сокращая избыточный код.
  • Промежуточная цепочка: Легко интегрируется в цепочки промежуточного ПО Express, что позволяет выборочное использование на конкретных маршрутах или конечных точках.
  • Проверка файлов: Поддерживает встроенную проверку файлов, повышая безопасность и контроль загружаемого контента.
  • Загрузка нескольких файлов: Эффективно обрабатывает загрузку нескольких файлов в одном запросе.
  • Документация и сообщество: Благодаря обширной документации и активному сообществу.
  • Переименование файлов и управление хранением: Позволяет настраивать соглашения о наименовании файлов и местоположении хранения.

Formidable с Express

  • Универсальность: Работает на разных средах HTTP-сервера, не ограничиваясь только Express, что обеспечивает гибкость.
  • Потоковая обработка: Способен обрабатывать входящие потоки данных, идеально подходит для обработки больших файлов.
  • Настройка: Обеспечивает гранулярный контроль над процессом разбора, поддерживая пользовательскую логику.
  • Минимальные зависимости: Уменьшает размер проекта с минимальным количеством внешних зависимостей.
  • Широкое принятие: Хорошо известная библиотека в сообществе Node.js.

Выбирайте Multer и Formidable на основе требований вашего проекта и знакомства с библиотекой. Multer отлично подходит для интеграции с Express, встроенной проверки и прямой методики. Formidable предпочтителен, когда требуется большая настройка, универсальность или возможности потоковой обработки больших файлов.

Вывод

В заключение, в данной статье было показано, как разработать приложение Node.js TypeScript для эффективной загрузки больших наборов данных в Amazon S3 с использованием потоковых передач данных. Потоковая передача данных является экономичным по памяти и масштабируемым подходом, особенно при работе с гигабайтами данных. Следуя шагам, описанным в данном руководстве, вы можете улучшить возможности загрузки данных и создавать более надежные приложения.


Leave a Reply

Your email address will not be published. Required fields are marked *