ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis...

28
ì NoSQL TESTO CONSIGLIATO http://martinfowler.com/nosql.html Definizione ì Nella seconda metà degli anni 2000 Google, Amazon, Facebook studiavano nuove modalità di memorizzazione persistente dei dati Google è BigTable Amazon è DynamoDB Facebook è Cassandra ì Il movimento nasce nel 2009 ì Nome scelto per attirare partecipanti a un incontro fra sviluppatori di DBMS “open-source, distribuiti, non relazionaliGiorgio Giacinto 2015 2

Transcript of ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis...

Page 1: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

ìNoSQL

TESTOCONSIGLIATOhttp://martinfowler.com/nosql.html

Definizione

ì Nellasecondametàdeglianni2000Google,Amazon,Facebook studiavanonuovemodalità dimemorizzazionepersistentedeidati

Google è BigTable

Amazon è DynamoDB

Facebook è Cassandra

ì Ilmovimento nascenel2009

ì NomesceltoperattirarepartecipantiaunincontrofrasviluppatoridiDBMS“open-source,distribuiti,nonrelazionali”

Giorgio Giacinto 2015

2

Page 2: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Principali vantaggi modello relazionale

ì DBMSrelazionali(SQL)ottimiper

ì Persistenzadeidati

ì IDBMSconsentonodiorganizzarelamemorizzazione

digrandiquantitàdidatiutili

ì L’estrazionedidatitramitequery SQLèsemplice

ì Integrazionediapplicazionidiverseì L’accessoaidatièfacilitatodallaseparazionefra

organizzazionefisicaeorganizzazionelogica

ì Gestionedellaconcorrenza(transazioni)

ì PortabilitàemanutenibilitàgrazieallostandardSQL

Giorgio Giacinto 2015

3

Criticità del modello relazionale per lo sviluppo di applicazioni web nel 21° secolo

ì Disadattamentodiimpedenza

ì Ilmodellorelazionaleelaborainsiemidituple

ì Ciascunatupla èuninsiemediattributisemplici

ì Unastrutturadaticomplessadaluogoanumerose

relazioni

Giorgio Giacinto 2015

4

Page 3: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Esempio di disadattamento di impedenzaInterfacciautenteperunmodulod’ordine

ecorrispondentitabellenelmodellorelazionale

Giorgio Giacinto 2015

5

Criticità del modello relazionale per lo sviluppo di applicazioni web nel 21° secolo

ì BasidiDatiorientateall’integrazioneì Unodegliscopiprimaridelmodellorelazionale

ì LaBasediDaticentralizzata ottimizzamediamentel’accessodapartediapplicazionidiverse

ì BasidiDatiorientateall’applicazioneì L’archiviodeidatiottimizzatorispettoall’unica

applicazionechevideveaccedere

ì ApplicazionidiversepossonocooperarescambiandodatiusandoilformatoXML eilprotocolloHTTPì XMLconsenteladefinizionedistrutturedati

complesseì Coerenzadeidatiacaricodelleapplicazioni

Giorgio Giacinto 2015

6

Page 4: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Criticità del modello relazionale per lo sviluppo di applicazioni web nel 21° secolo

ì Rapidacrescitaafineanni‘90delleimpreseicuiprofittiderivanodalweb(dot-com)

ì EspansionesupportoHWattraversoclusterdicomputerabassocosto

ì Altascalabilitàacosticontenuti

ì L’usodibasididatirelazionalirichiede

ì unsistemadimemorizzazionecentralizzato

ì acquistodilicenzeperogniprocessore/nodo

IDBMSrelazionalinonsonostatisviluppatiperessereeseguitisusistemicluster

Giorgio Giacinto 2015

7

NoSQL

ì Nonindicaunmodello,néunprodotto,néuna

famigliadiprodotti.

ì E’unmovimento chepromuovesistemidi

memorizzazionepersistentealternativialmodello

relazionale

ì Ciascunsistema“NoSQL”èorientatoaun

particolaredominioapplicativo

ì ListadiprogettiNoSQL su

http://nosql-database.org

Giorgio Giacinto 2015

8

Page 5: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Caratteristiche comuni sistemi NoSQL

ì Natinel21° secoloperleimpresedelwebì noncomprendonoimodellipre-SQL

ì eraBC– Before Codd

ì Open-source

ì Adattiaessereeseguitidauncluster

ì Assenzadiunoschemaì Consentel’usodirecordconnumerodiattributi

variabile

ì NonsupportanointerrogazioneconlinguaggioSQLì OperazionisullabasedidatieseguitetramiteAPI

Giorgio Giacinto 2015

9

DBMS relazionali e DB NoSQL

ì Nondevonoessereconsideraticomeantagonisti

MA

ì comesoluzionicomplementari,ciascunaadattaa

unparticolareambienteoperativo

ì Inunaaziendamodernacoesistonobasididati

relazionaliebasididati‘NoSQL’

ì sipuòparlarediSadalage &Fowler

Giorgio Giacinto 2015

10

Page 6: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

ìModelli di Dati Aggregati

Giorgio Giacinto 2015

11

Modelli dei dati

ì Imodellideidatidescrivonoilmodoconcuiidati

sonomanipolati dagliutilizzatori

ì Imodellidimemorizzazionedeidati descrivonoilmodoconcuiidatisonoregistrati inmodo

persistente

ì Nelmondoidealedovrebbeesseresufficiente

lavoraresoloalivellodeimodellilogici…

…mal’ottimizzazionedelleprestazionirichiedela

conoscenzadelmodellodimemorizzazione

Giorgio Giacinto 2015

12

Page 7: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Modelli dei dati aggregati

ì GliapprocciNoSQL possonoesseresuddivisiin

quattromodellididati

ì key-value

ì document store

ì column-family

ì graph

ì Caratteristicacomune:sonoorientati

all’aggregazione

Giorgio Giacinto 2015

13

Orientamento all’aggregazione

ì Nelmodellorelazionaleleentitàsono

rappresentatecometuple divalori

ì Nonèpossibileavereunatupla ounalistadivalori

annidatainun’altratupla

ì Ilmodellorelazionaleèidoneoarappresentare

entitàconstrutturasemplice

ì Un indicaunacollezionedioggettiin

relazionefraloro,daconsiderarecomeunaunità

ì Rappresentadaticonstrutturacomplessa

Giorgio Giacinto 2015

14

Page 8: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

EsempioModello relazionale (UML) per un sito di e-commerce

Giorgio Giacinto 2015

15

EsempioUn possibile stato del RDBMS per un sito di e-commerce

Giorgio Giacinto 2015

16

Page 9: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

EsempioModello orientato all’aggregazione per un sito di e-commerce

Giorgio Giacinto 2015

17

EsempioDefinizione in JSON di aggregati del sito di e-commerce

Giorgio Giacinto 2015

Ilvaloreè intuttigliaggregati

18

Page 10: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

EsempioAltro modello orientato agli aggregati per un sito di e-commerce

Giorgio Giacinto 2015

Tuttigliordinidiun

clientesonoall’interno

dell’aggregatoCliente

19

EsempioDefinizione in JSON di aggregati del sito di e-commerce

Giorgio Giacinto 2015

20

Page 11: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Progettazione per aggregati

ì Diversepossibilitàdidefinireaggregati.

ì Lasceltadipendeprincipalmentedall’aggregazionedidaticoinvoltanelleoperazionipiùfrequentiì Ades.,potreivolerspessoaccedereaidatideiclienti

eatuttigliordinichehannofattooppure

ì potreivolerspessoaccedereaisoliordinisingolarmente

ì Selabasedidatirisiedeinuncluster,simemorizzanosuisingolinodiidatigiàaggregati

ì minimizzazionetempidiaccessoaidatiaggregati

Giorgio Giacinto 2015

21

Accesso ai datiOggettiinseritiinununico

aggregato

Aggregatiseparatiper

ClientieOrdini

Giorgio Giacinto 2015

22

Page 12: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Modello relazionale e aggregati

ì Ilmodellorelazionalenonprevedeilcostrutto

aggregazione

ì E’espressoattraversoilvincolodiintegritàreferenziale

ì Vantaggiodelmodellorelazionaleaggregate-ignorantì E’unmodellogeneraledeidati,nonlegatoalle

operazionipiùfrequentisullabasedidati

ì Consentediesprimereinmodosempliceunaampia

varietàdioperazionidimanipolazionedeidati

ì Unmodelloconaggregatièspecializzato peralcunemanipolazionideidatifrequenti

Giorgio Giacinto 2015

23

Aggregati e proprietà ACID

ì ImodelliNoSQL nonsempregarantisconole

proprietàACID

ì Atomicità alivellodisingoloaggregatoì InmoltimodelliNoSQL ècompitodel

programmatoregarantirel’atomicità suoperazionichecoinvolgonopiùaggregati

ì Lagestionedellacoerenza èpiùcomplessarispetto

almodellorelazionale

Giorgio Giacinto 2015

24

Page 13: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

I modelli e

ì Inquestimodelliciascunaggregatopossiedeun

identificatore

ì key-valueì nessunastrutturaneidati

ì labasedidatitrattaciascunaggregatocomeunblobdi

bitsenzasignificato(opacitàdellabasedidati)

ì possibilerecuperaresolointeriaggregatiinbaseall’id

ì documentì èpresenteunastrutturacheimponedeivincoli

ì flessibilitànellamanipolazionedeidati

ì interrogazioniancheinbaseaicampidellastruttura

Giorgio Giacinto 2015

25

Il modello

ì Primoesempio:BigTable realizzatodaGoogle

ì Memorizzazionepercolonneanzichéperrighe

ì Colonneaggregateattraversounamappaadue

livelli

Giorgio Giacinto 2015

26

Page 14: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Il modello basato su

Giorgio Giacinto 2015

ì Inodi contengono

informazionisemplici

ì Unnomeoelementi

ditipochiave-valore

ì Gliarchi rappresentano

lerelazionifrainodi

ì Utiliperinterrogazioni

deltipo:

mostraglioggettichepiaccionoaBarbaraeAnna

Facebook usaunmodelloagrafi:Bronson etal., TAO:Facebook’s DistributedDataStore fortheSocialGraph (USENIX2013)

27

Basi di dati senza schema

ì UnadellecaratteristichecomuniaimodelliNoSQL è

l’assenzadiunoschema

ì Inprincipioogniinformazionememorizzata

potrebbeesseredescrittadaattributidiversi

ì LoschemaneimodelliNoSQL èimplicitonelcodice

dell’applicazioneusatoperaccedereaidati

ì LamemorizzazionedidaticonmodelliNoSQL nonè

adattaperl’accessoaidatidaapplicazionidiverse

Giorgio Giacinto 2015

28

Page 15: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

ìKEY-VALUE DATABASES

Giorgio Giacinto 2015

29

Definizione

ì Lebasididatiditipokey-value sonolepiùsemplici

dausaredalpuntodivistadelleAPI

ì Uncontenitoredeltipochiave-valoreèunatabella

hash.

ì ConfrontofralaterminologiaOracleeRiak

Giorgio Giacinto 2015

30

Page 16: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

key-value store

ì Lachiaveconsentediindividuarel’entità,mentreil

valoreèunblobdidati.

ì blob=binary largeobject

ì AlcuniDBditipokey-value

ì Riak

ì Redis

ì Memcached DB

ì HamsterDB

ì AmazonDynamoDB

ì ProjectVoldemort

Giorgio Giacinto 2015

31

Modelli di memorizzazione dei dati

Giorgio Giacinto 2015

Ununicobucket checontieneunasolacoppia

chiave-valorecherappresental’utenteeilsuo

acquisto

Ununicobucket incuièpossibilespecificare

chiavidistinteperrecuperareisingolioggetti

nelbucket

Scalabilitàattraversosharding sulvaloredellachiave

32

Page 17: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Interrogazioni nel modello key-value

ì Leinterrogazionipossonocoinvolgeresololachiave

ì Sirecuperailblobassociatoeeventualialtre

condizionisuivalorinelblobdevonoessere

verificatealivelloapplicativo

ì Spessolachiaveècreataautomaticamente

ì ades.,numeroprogressivodiunordine

mapuòancheessereunaemail,unnomeutente

Giorgio Giacinto 2015

33

Quando usare il modello key-value

ì Memorizzazionediinformazionidisessioneper

applicazioniweb

ì Gestioneprofiliutenteerelativepreferenze

ì Rappresentazionedel“carrellodellaspesa”in

applicazionidicommercioelettronico

Giorgio Giacinto 2015

34

Page 18: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Quando non usare il modello key-value

ì Gestionedidatiinrelazionefraloro

ì Transazioniconoperazionimultiple

ì Interrogazionisuidati(“valore”associatoalla

chiave)

ì Necessitàdioperaresuinsiemididati

Giorgio Giacinto 2015

35

ìDOCUMENT DATABASES

Giorgio Giacinto 2015

36

Page 19: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Modello dei dati

ì Questoèilmodellopiùsimileallebasididati

relazionali

ì memorizzadocumentiXML,JSON,ecc.

ì ConfrontofralaterminologiaOracleeMongoDB

Giorgio Giacinto 2015

37

Caratteristiche del modello document

ì Ciascundocumentohaunoschema

ì sonopossibiliinterrogazionisucampideldocumento

ì Documentidiversidiunastessabasedidatipossono

avereschemidiversichecondividonosoloalcuni

attributi

ì AlcuniDBditipodocument

ì MongoDB

ì CouchDB

ì Terrastore

ì OrientDB

ì RavenDB

Giorgio Giacinto 2015

38

Page 20: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Esempi di documenti di una base di dati

Giorgio Giacinto 2015

Documento1

Documento2

39

MongoDB: Rappresentazione dellarelazione WORKS_ON

Giorgio Giacinto 2015

40

Page 21: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

MongoDB: Rappresentazione dellarelazione WORKS_ON

Giorgio Giacinto 2015

41

InterrogazioniEsempi con MongoDB

ì SELECT * FROM orderdiventa db.order.find()

ì SELECT * FROM order WHERE customerId = "883c2c5b4e5b”diventa db.order.find({"customerId":"883c2c5b4e5b"})

ì SELECT * FROM customerOrder, orderItem, product WHERE customerOrder.orderId = orderItem.customerOrderId AND orderItem.productId = product.productId AND product.name LIKE '%Refactoring%’diventa db.orders.find({"items.product.name":/Refactoring/})

Giorgio Giacinto 2015

42

Page 22: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Quando usare il modello document

ì Registrazionedieventi(event logging)ì Consentediregistrareeventidiversi,ciascunoconil

proprioinsiemediattributi

ì ContentManagementSystems(CMS)

Piattaformeperblog

ì WebAnalytics

ì Applicazionicommercioelettronico

Giorgio Giacinto 2015

43

Quando non usare il modello document

ì Necessitàdieffettuaretransazionicomplesseche

coinvolgononumeroseoperazioni

ì Interrogazionichecoinvolgonoaggregatilacui

strutturaèvariabile

Giorgio Giacinto 2015

44

Page 23: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

ìCOLUMN-FAMILY STORES

Giorgio Giacinto 2015

45

Proprietà

ì Idatisonorappresentatiattraversounachiave

associataauninsiemedivalori,eivalori

appartengonoaunafamigliadicolonne

Giorgio Giacinto 2015

46

Page 24: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Basi di dati di tipo column-family

ì Appartengonoaquestatipologia

ì Cassandra

ì Hbase

ì Hypertable

ì AmazonDynamoDB

Giorgio Giacinto 2015

47

Esempio di column family

Giorgio Giacinto 2015

48

Page 25: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Linguaggio DDL e DML in Cassandra

ì Cassandrahaunsuolinguaggio(CQL)simileaSQL

CREATE COLUMNFAMILY Customer ( KEY varcharPRIMARY KEY, name varchar, city varchar, web varchar);

INSERT INTO Customer (KEY,name,city,web)VALUES ('mfowler’,'Martin Fowler’,'Boston’,'www.martinfowler.com');

Giorgio Giacinto 2015

49

Interrogazioni in Cassandra

ì SELECT * FROM Customer

ì SELECT name,web FROM Customer

ì SELECT name,web FROM CustomerWHERE city='Boston’

ì NonostantelasomiglianzaconSQL,CQLnon

supportatutteleinterrogazioniSQL

ì Nonèpossibileusareinterrogazioniannidate

ì Nonèpossibilel’operazionedijoin

ì DisolitolaclausolaWHEREèsemplice

Giorgio Giacinto 2015

50

Page 26: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Quando usare il modello column-family

ì Registrazionedieventi(event logging)

ì ContentManagementSystems(CMS)

Piattaformeperblog

ì Contatori

ì Ades.,visitatoridiunapaginaweb

ì Gestionescadenze

ì Ades.,licenzesoftwareinprovaperunperiododi

tempolimitato

Giorgio Giacinto 2015

51

Quando non usare il modello column-family

ì NecessitàditransazioniconproprietàACID

ì Interrogazioniconfunzionidiaggregazione

(ades.,SUM,AVG)

Giorgio Giacinto 2015

52

Page 27: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

ìPOLYGLOT PERSISTENCE

Giorgio Giacinto 2015

53

A ciascun dato, il suo modello

Giorgio Giacinto 2015

Approcciotipico:unicomodellodidatiper

lediverseattività.

Polyglot persistence:modellididati

diversiperciascunaattività.

54

Page 28: ì NoSQL - Home - people.unica.it...2016/12/21  · ì Alcuni DB di tipo key-value ì Riak ì Redis ì Memcached DB ì HamsterDB ì Amazon DynamoDB ì Project Voldemort Giorgio Giacinto

Evoluzione: dalle basi di dati ai servizi

ì Persemplificarelascritturadiapplicazionichesi

devonointerfacciareadiversebasididati

ì siincapsulaciascunabasedidatiinunservizio

ì LeapplicazionicomunicanoconleAPIdelservizio

Giorgio Giacinto 2015

55

NoSQL e RDBMS

ì IlmovimentoNoSQL nonminaccial’usodeiRDBMS

ì Ilmodellorelazionaleèancoravalidoperle

applicazioniperlequalièstatosviluppato

ì SoluzioniNoSQL sonodapreferireaRDBMSper

nuoveesigenzedimemorizzazioneegestionedei

datiricollegabiliallo

ì Sviluppodelwebedellesueapplicazioni

ì Retisocialivirtuali

ì Evoluzionepiattaformedicalcolo

Giorgio Giacinto 2015

56