HyperAI
Back to Headlines

s3mini : Une bibliothèque TypeScript légère et rapide pour le stockage objet S3 compatible, adaptée aux plateformes d’edge computing

il y a un mois

Résumé de s3mini : Un minuscule client S3 pour Node et les plateformes Edge s3mini est une bibliothèque client ultra-légère, écrite en TypeScript, pour les services de stockage d'objets compatibles avec S3. Cette bibliothèque mesure environ 14 KB une fois minimisée et affiche une performance supérieure de 15% en moyenne, grâce à son utilisation optimisée des opérations par seconde. Elle est compatible avec Node.js, Bun, et Cloudflare Workers, ce qui la rend idéale pour les environnements de calcul Edge. Pour l'instant, elle ne prend pas en charge les navigateurs Web. Caractéristiques principales Léga et performante : Avec sa taille minuscule de 14 KB et ses performances accrues, s3mini est conçue pour être déployée même dans des environnements aux ressources limitées. Aucune dépendance : Le client n'a besoin d'aucune bibliothèque externe, ce qui simplifie son intégration et son maintenance. Compatibilité AWS SigV4 : s3mini supporte la signature AWS SigV4 pour une sécurité renforcée sans nécessiter de requêtes pré-signées. Fonctionnalités essentielles : La bibliothèque se concentre sur les API S3 fondamentales telles que list, put, get, delete, ainsi que quelques autres. BYOS3 : Bring Your Own S3-compatible bucket — vous pouvez utiliser vos propres buckets compatibles S3, testés sur plusieurs fournisseurs comme Cloudflare R2, Backblaze B2, DigitalOcean Spaces, MinIO et Garage. Des tests sur Ceph et AWS sont également en cours. Plateformes testées Local MinIO : Les tests de performance ont été réalisés sur une instance locale de MinIO. Cloudflare Workers : Nécessite l'activation du drapeau de compatibilité nodejs_compat dans le fichier de configuration Wrangler, ainsi que nodejs_compat_v2 si la date de compatibilité est postérieure au 23 septembre 2024. Backblaze B2 DigitalOcean Spaces MinIO Garage Utilisation La bibliothèque s3mini est facile à utiliser et à intégrer dans vos projets. Voici un exemple de base pour créer un client, vérifier l'existence d'un bucket, et gérer les objets : ```typescript import { s3mini, sanitizeETag } from 's3mini'; const s3client = new s3mini({ accessKeyId: config.accessKeyId, secretAccessKey: config.secretAccessKey, endpoint: config.endpoint, region: config.region, }); ``` Opérations sur les buckets Voyons comment vérifier et créer un bucket : typescript let exists: boolean = false; try { // Vérifions si le bucket existe exists = await s3client.bucketExists(); } catch (err) { throw new Error(`Échec de l'appel bucketExists(), peut-être des identifiants incorrects : ${err.message}`); } if (!exists) { // Créons le bucket await s3client.createBucket(); } Opérations sur les objets Maintenant, examinons comment manipuler des objets (fichiers) dans le bucket : ```typescript const smallObjectKey: string = 'small-object.txt'; const smallObjectContent: string = 'Bonjour, le monde !'; // Vérifions si l'objet existe const objectExists: boolean = await s3client.objectExists(smallObjectKey); let etag: string | null = null; if (!objectExists) { // Téléchargeons l'objet const resp: Response = await s3client.putObject(smallObjectKey, smallObjectContent); etag = sanitizeETag(resp.headers.get('etag')); } // Récupérons l'objet const objectData: string | null = await s3client.getObject(smallObjectKey); console.log('Contenu de l\'objet :', objectData); // Liste des objets dans le bucket const list: object[] | null = await s3client.listObjects(); if (list) { console.log('Liste des objets :', list); } else { console.log('Pas d\'objets trouvés dans le bucket.'); } // Supprimons l'objet const wasDeleted: boolean = await s3client.deleteObject(smallObjectKey); ``` Téléchargement et téléchargement multipart Pour gérer de grands objets, s3mini offre des fonctionnalités de chargement et de téléchargement multipart. Voici un exemple de téléversement d'un objet de 15 MB : ```typescript const multipartKey: string = 'multipart-object.txt'; const largeBuffer: Uint8Array = new Uint8Array(1024 * 1024 * 15); // 15 MB buffer const partSize: number = 8 * 1024 * 1024; // 8 MB const totalParts: number = Math.ceil(largeBuffer.length / partSize); // Obtenons une nouvelle uploadId const uploadId = await s3client.getMultipartUploadId(multipartKey); // Téléversons chaque partie const uploadPromises = []; for (let i = 0; i < totalParts; i++) { const partBuffer = largeBuffer.subarray(i * partSize, (i + 1) * partSize); uploadPromises.push(s3client.uploadPart(multipartKey, uploadId, partBuffer, i + 1)); } const uploadResponses = await Promise.all(uploadPromises); // Terminons le transfert multipart const parts = uploadResponses.map((response, index) => ({ partNumber: index + 1, etag: response.etag, })); const completeResponse = await s3client.completeMultipartUpload(multipartKey, uploadId, parts); const completeEtag = completeResponse.etag; // Liste des transferts multipart en cours const multipartUploads: object = await s3client.listMultipartUploads(); // Annulons un transfert multipart await s3client.abortMultipartUpload(multipartUploads.key, multipartUploads.uploadId); // Téléchargemont un objet multipart const rangeStart: number = 2048 * 1024; // 2 MB const rangeEnd: number = 8 * 1024 * 1024 * 2; // 16 MB const rangeResponse = await s3client.getObjectRaw(multipartKey, false, rangeStart, rangeEnd); const rangeData: ArrayBuffer = await rangeResponse.arrayBuffer(); ``` Notes de sécurité et contributions s3mini est une bibliothèque ouverte aux contributions de la communauté. Si vous rencontrez des problèmes ou avez des suggestions, n'hésitez pas à ouvrir une issue sur GitHub. Pour soumettre des corrections ou de nouvelles fonctionnalités, envoyez une pull request vers la branche dev. L'esprit s3mini est celui de la légèreté et de l'absence de dépendances ; veillez à respecter cette philosophie lors de vos contributions. Licence Ce projet est sous licence MIT. Pour plus d'informations, consulmez le fichier LICENSE.md. Sponsoring Le développement et la maintenance de s3mini nécessitent du temps et des efforts. Si vous trouvez cette bibliothèque utile, envisagez de la parrainer pour soutenir son auteur. Votre contribution aidera à assurer une amélioration continue de s3mini. s3mini est un projet qui répond aux besoins croissants de solutions légères et performantes pour les stockages d'objets compatibles S3. Sa polyvalence et sa capacité à fonctionner sur des plateformes Edge font d'elle un choix idéal pour les applications modernes et hautement réparties.

Related Links