Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Rust: migrazione via rete da MySQL a MongoDB

Rust: analizziamo un esempio di utilizzo del linguaggio di programmazione con la migrazione via rete da MySQL a MongoDB
Rust: analizziamo un esempio di utilizzo del linguaggio di programmazione con la migrazione via rete da MySQL a MongoDB
Link copiato negli appunti

Dopo aver parlato tanto di Rust in questa guida, realizziamo un esempio finale che metta in luce le caratteristiche di questo linguaggio e ci aiuti ad approfondire alcuni argomenti fondamentali che abbiamo trattato.

Il nostro progetto in Rust

Creiamo una sperimentazione composta da due programmi Rust, basati su due progetti Cargo differenti il cui scopo complessivo consiste nel trasferire dei dati da un database MySQL ad un database MongoDB ed in particolare:

Non rientrando negli scopi di questa guida la strutturazione interna di database, prepareremo strutture semplici per i dati da trasferire. Lo spunto "operativo" sarà la migrazione di dati relativi ad un elenco di testi, una sorta di catalogo di libreria, custoditi nella tabella MySQL.

Definiremo delle tuple composte da tre semplici campi - titolo del libro, nome dell'autore, numero di pagine - pertanto potrà costituire un valido esercizio di approfondimento aggiungere qualche altro campo, magari di tipo di dato differente, per espandere la definizione dei testi e soprattutto ampliare la gestione dei dati inserita nel codice.

I database

Si lascia liberi di gestire i database come si preferisce. Si potranno utilizzare installazione in locale o servizi in Cloud. Noi dal lato nostro utilizzeremo dei container Docker, sia per gestire l'istanza MySQL sia per quella MongoDB.
Si tratta di una soluzione molto comoda in quanto, in primis, non è necessario installare alcunché in locale ed inoltre i container, oltre ai server, contengono i relativi client ed ulteriori tool per la gestione dei dati. Per adattare quanto faremo nell'esempio al proprio contesto di sperimentazione sarà sufficiente adattare le stringhe di connessione sia per il database relazionale sia per quello NoSQL.

Per chi volesse seguire la nostra via e avesse disponibile un'installazione di Docker si può avviare un database MySQL in un container con il seguente comando:

docker run --name mysqldb  -e MYSQL_ROOT_PASSWORD=12345 -d --rm -p 3306:3306 mysql

Useremo nel corso della sperimentazione un accesso root con password 12345, pratiche sconsigliate ai fini della sicurezza in reali ambienti di produzione ma che a scopo esemplificativo possono andare bene.

La tabella per il nostro esempio su Rust

La tabella sarà costituita da cinque semplici righe e l'intero database può essere importato con il seguente script (anche se non si usa Docker):

-- MySQL dump 10.13  Distrib 9.2.0, for Linux (x86_64)
--
-- Host: localhost    Database: biblioteca
-- ------------------------------------------------------
-- Server version	9.2.0
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE biblioteca;
USE biblioteca;
--
-- Table structure for table `libri`
--
DROP TABLE IF EXISTS `libri`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `libri` (
  `titolo` varchar(70) DEFAULT NULL,
  `autore` varchar(70) DEFAULT NULL,
  `numero_pagine` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `libri`
--
LOCK TABLES `libri` WRITE;
/*!40000 ALTER TABLE `libri` DISABLE KEYS */;
INSERT INTO `libri` VALUES ('Il mio giardino','Luca Rossi',567),('Racconti di fantasia','Selene Verdi',345),('Il grande assalto','Domenico Neri',876),('Alla scoperta del West','Giorgio Bianchi',598),('Avventure spaziali','Alessia Gialli',765);
/*!40000 ALTER TABLE `libri` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Avvio del database MongoDB

Il database MongoDB può invece essere avviato in container con:

docker run --name mongodb -d -p 27017:27017 mongo

Il client mongosh, una sorta di shell per interagire con MongoDB, potrà essere trovato all'interno del container stesso se non lo si vuole installare a parte.

Quali librerie utilizzeremo per il nostro esempio dedicato a Rust?

Tutte le librerie coinvolte per gestione dei database e della rete saranno quelle incontrate nelle lezioni precedenti della guida Rust. Questi i crate di nostro interesse:

  • mysql per l'interazione con il database MySQL;
  • mongodb per la gestione dei dati con il database MongoDB;
  • warp per la creazione di API REST;
  • reqwest per l'invio di richieste client via HTTP.

A contorno ce ne saranno molte altre come l'importantissima tokio per la gestione di attività asincrone. Tuttavia, per ogni singolo aspetto, si potrà optare per le ulteriori valide alternative che Rust offre in gran quantità. A questo punto siamo pronti, per poter iniziare ad affrontare la nostra sperimentazione.

Ti consigliamo anche