No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

39
Gianbattista Schieppati (MyTI Srl) Politecnico di Milano Corso di Sistemi informativi : 12 -11-2013 INTRODUZIONE A noSQL

description

Corso introduzione a noSQL , Politecnico di Milano, Sistemi Informativi , 12-11-2013

Transcript of No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Page 1: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Gianbattista Schieppati (MyTI Srl)

Politecnico di MilanoCorso di Sistemi informativi : 12 -11-2013

INTRODUZIONE A noSQL

Page 2: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Mi presento:

Ing. Gianbattista Schieppati

18 anni di esperienze: Business Intelligence (sviluppato e gestito

Infobusiness prodotto di BI più venduto in italia)

Enterprise Search Engine (Capo progetto per lo sviluppo di Bleen Enterprise Search Engine)

Co-founder di MyTI- Tecnologie Informatiche Altri progetti (sviluppo ambienti di sviluppo,

enterprise portal, business mobile applications, IT strategy)

Page 3: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Database Relazionali

Modello Concettuale

Modello Logico

Modello Fisico

ATOMICITÀ: la transazione è indivisibile nella sua esecuzione e la sua esecuzione deve essere o totale o nulla, non sono ammesse esecuzioni parziali

COERENZA: quando inizia una transazione il database si trova in uno stato coerente e quando la transazione termina il database deve essere in un altro stato coerente

ISOLAMENTO: ogni transazione deve essere eseguita in modo isolato e indipendente dalle altre transazioni, l'eventuale fallimento di una transazione non deve interferire con le altre transazioni in esecuzione

DURABILITÀ: detta anche persistenza

Page 4: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

4

Database Relazionali

Caratteristiche:• Modello ER• Linguaggio SQL• Prestazioni legate all’ENGINE • Scalabilità/robustezza/prestazioni dipendono dalla

implementazione (modello, dati e engine)

Page 5: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

5

Database Relazionali

• GENERALE :modello formale per rappresentare “qualsiasi” cosa

• SCHEMA FISSO: dati ben conosciuti, formalizzati , ottimizzati per ridurre numero di scritture

• TRANSAZIONE CENTRICO• OTTIMIZZAZIONE dello Spazio disco• SCALABILITÀ LIMITATA (costosa) e soprattutto

verticale

Page 6: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

6

Nuove esigenze

Email, Documenti, Applicazioni, Utenti,

Musica, Video ….

Prodotti, Utenti, Musica….

Le transazioni sono importanti solo in certe zone (basket, pagamenti) Moltissimi READ da parte degli utenti.Enormi moli di dati con forma non prevedibile a prioriUn unico ER per Amazon sarebbe in continua riscrittura.

Page 7: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

7

Nuove esigenze

Disponibilità 99.99% : aumentare fault tolerance in caso di guasti

Scalabilità orizzontale : partizionare dati su più macchine, più datacenter, più continenti

Page 8: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Data partitioning• In caso di grandi quantità di dati è necessario distribuirli su più servers

• Partizionamento Orizzontale (sharding)

• Partizionamento Verticale

8

Page 9: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

9

Nuovi teoremiCAP Theorem: (Eric Brewers) :

Un sistema distribuito è in grado di soddisfare al massimo due di queste garanzie allo stesso tempo, ma non tutte e tre

COERENZA(tutti i nodi vedono gli stessi dati nello stesso

momento)

DISPONIBILITA’(la garanzia che ogni richiesta riceva una

risposta su ciò che sia riuscito o fallito)

TOLLERANZA DI PARTIZIONE

(il sistema continua a funzionare

nonostante arbitrarie perdite di messaggi)

Page 10: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

10

Non si può avere tutto

Page 11: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

11

Nuovi sistemi

BASEBasically Available Soft-state services with Eventual-consistency

Scalabilità Orizzontale

99.99%

Alta Disponibilità per i servizi di primo livello, con meccanismi di pulizia per risolvere errori o problemi che hanno violato la consistenza.

Page 12: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

12

NoSQL = Not Only SQL

• Non Relazionali• Schema non rigido• Scalabile Orizzontalmente• Per lo più OpenSource

Caratteristiche comuni

• Non rigido su alcuni dei cardini ACID• Supporto alla replica• API semplici

In più

• No Join• No Ref Integrity

NON supportano tutte le funzioni SQL

Page 13: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

13

Tipi• CouchDB• MongoDB• SOLR

Document oriented

• Cassandra• Hbase

Column oriented (Tabulari)

• InfiniteGraph• Neo4J

Graph oriented

• Redis• Riak• Voldemort (linkedin)• BigTable (Google)

Key-Value store

Page 14: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

14

Document Oriented

• Gestiscono strutture complesse semi – strutturate• La struttura del documento non deve essere

conosciuta a priori, può cambiare al volo e documenti diversi possono avere strutture diverse

• Usati per full text search engines.

Document oriented

Page 15: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

15

Document Oriented - Esempio• List<String> likes = new ArrayList<String>();• likes.add(“pop-corn”);• likes.add(“kebab”);• likes.add(“involtini primavera”);

• document.put(“name”,”Gianbattista”);• doc.put(“age”,43);• doc.put(“date”, new Date());• doc.put(“likes”,likes);

• collection.insert(doc);

Create

• document doc=new document();• doc.put(“name”,”Gianbattista”);• cursor =collection.find(doc);• While (cursor.hasNext())

• System.out.println(cursor.next());

• cursor.close()

Read

Su una macchina è sub ottimoMa può scalare : MAPREDUCE

mongoDB

Page 16: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

16

Column store

• Gestiscono dati strutturati• Non registra i record come gli ER ma le colonne. Così da

poterle distribuire su più macchine, in base alla loro importanza

• I gruppi di colonne sono definiti a priori ma in un gruppo si possono avere schemi liberi

Column store

Page 17: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

17

Key-value store

• Sono gli store più semplici, veloci in scrittura, velocissimi in lettura ma solo sulla chiave

• Scalabilità facile• Quelli base gestiscono solo il select from where

CAMPO = chiave

Key-value store

Page 18: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

18

Key-value store - Esempio• String id= Long.toString(j.incr(“global:nextUserId”);• j.set(“uid:”+id+”:name”,”Gianbattista”);• j.set(“uid:”+id+”:age”,”43”);• j.set(“uid:”+id+”:date”,new Date().toString());• j.sadd(“uid:”+id+”:likes”,”pop-corn”);• j.sadd(“uid:”+id+”:likes”,”kebabs”);• j.sadd(“uid:”+id+”:likes”,”involtini primavera”);

• j.hset(“uid:lookup:name”,”Gianbattista”,id);

Create

• String id=j.hget(“uid:lookup:name”,”Gianbattista”);

• print(“name”, j.get(“uid:”+id+”:name”));• print(“age”, j.get(“uid:”+id+”:age”));• print(“name”, j.get(“uid:”+id+”:date”));• print(“likes”, j.smembers(“uid:”+id+”:likes”));

Read

• SELECT * from Table where ID=id : devo ciclare

SQL ?

Su una macchina è sub ottimoMa può scalare : MAPREDUCEREDIS

Page 19: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

19

Graph store

• Nodi, relazioni tra i nodi e proprietà key-value

• Accesso ai dati mediante algoritmi di navigazione grafi

Graph store

Page 20: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

20

Graph store - Esempio•Transaction tx =graphDB.beginTx();

•Try {•firstNode = graphDb.createNode();•firstNode.setProperty(“name”,”Gianbattista”);•firstNode.setProperty(“age”,43);•firstNode.setProperty(“date”, new Date().toString());•secondNode= graphDb.createNode();•secondNode.setProperty(“food”,”involtini primavera”,”pop corn”,”kebab”);•relationship = firstNode.createRelationshipTo(secondNode, RelTypes.LIKES);•Relationship.setProperty(“likes”,”likes”);•tx.success();

• } finally {tx.finish();}

Create

•Transaction tx = graphDB.beginTx();•Try {•print(“name”, firstNode.getProperty(”name”));•print(“age”, firstNode.getProperty(”age”));•print(“date”, firstNode.getProperty(”date”))•print(“likes”, secondNode.getProperty(”food”));•tx.success():• } finally { tx.finish();}

Read

Neo4J

Page 21: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

21

Quando scegliere un NoSQL?

Un sistema SQL standard (Oracle, SQL server, MySQL, PostGres…) è un sistema complesso che fornisce tutte le funzioni necessarie per la gestione dei dati:transazioni, join, ricerca, scalabilità , tipizzazione, ….Ogni piattaforma noSQL è considerabile come una parte di un motore relazionale, spinta all’estremo, ma perdendo le altre funzioni.

NoSQL = Not only SQL

NoSQL è SQL frammentato e ottimizzato

Se voglio TUTTO -> SQLSe voglio POCO ma MEGLIO -> NoSQL

Page 22: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

22

Path decisionale

Project Voldemort (noSQL)• Key Value Store

Pro• Velocità in lettura e scrittura• Consistenza eventuale• Replicazione automatica

Plain OLD SQL: Select * from table where ID=$ID

Page 23: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

Path decisionale

SI CREANO SISTEMI COMPOSITI

23

Se devo ordinare i risultati (ORDER BY)

-> scrivo codice

Oppure -> Value Ordered Data Store

Se devo fare relazioni tra i dati (JOIN)

-> scrivo codice

Oppure -> Graph based Store

Se devo gestire ricerche veloci ed

ordinate con ranking

-> scrivo codice

Oppure -> Document database

Page 24: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

24

Andiamo sul pratico

Page 25: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

25

Bleen struttura

Storage

Engine

Solr Voldemort

Frontend Backend

Crawler

Scheduler

Searcher

Plugins

Tagger

Crawl Search Launch

Page 26: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

26

Bleen – componenti NoSQL

Project Voldemort:• Key Value data store. Motore originato da Dynamo di Linkedin.• Replicazione automatica su più server• Dati automaticamente partizionati • Consistenza Eventuale o Stretta • Server failure gestito in modo trasparente (disabilita e abilita nodi in

autonomia)

Apache SOLR: • Document Data store (basato su lucene)• Full text search , ricerca a facets, ranking, hit highlighting, near real-

time, dynamic clustering, alta disponibilità, scalabile , fault tolerant, indexing distribuito, replicazione load-balancing per le query.

• Usato da: WhiteHouse.gov, NetFix, Instagram, AOL, SourceForge, eBay, DuckDuckGO…

MySQL : database SQL

Page 27: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

27

Bleen crawlingOgni motore usato in parti dell’algoritmo in base alle sue peculiarità

Page 28: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

28

Bleen BIG DATA

Molti datiMolto DifformiProblematiche comuni (ACL,Presentazione,Ricerca)Molto variabili

= BIG DATA

SOLR come BaseTUTTO È UN DOCUMENTOTitolo, contenuto, rankingTag, metadata, tempo

Stesso sistema per interagire con TUTTE LE FONTI

Page 29: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

29

DA RELAZIONALE A NoSQLselect concat('Cl',IDCLIENTE) as id , Concat( CRA1,' ', IDCLIENTE) as title, Concat( CRA1,' <', IDCLIENTE,'>') as metacli, Ifnull(concat('Cliente: ', IDCLIENTE,' ’,RTRIM(ifnull(CRA1,' ')), ' Indirizzo: ', RTRIM(ifnull(CIND,'.')),' Telefono: ',ifnull(CTEL,' '), 'Email: ', ifnull(CEMAIL,' ') ,'Nota: ',ifnull(LTRIM(convert (NOTE using UTF8 )),'')),'nulla') as content,now() as ts,'Clienti' as type ,ifnull(CIND,' ') as indirizzo , ifnull(p.DESCRIPAESE,' ') as paese , ifnull(CTEL,' ') as telefono , ifnull(CPIV,' ') as partitaiva , ifnull(CEMAIL,' ') as email from clienti C INNER JOIN paesi p on C.PAESE=p.PAESEwhere cra1 is not null

id,idtitle,titlemetacli,metadata,Clientecontent,contenttype,typets,lastModifiedindirizzo,attribute,Indirizzopaese,attribute,paesetelefono,attribute,telefonopartitaiva,attribute,partitaivaemail,attribute,emailpaese,tag

Come estraggo da ER

Come scrivo in SOLR

Come lo mostro

<h2>${entity.title}</h2><table style=""><tr><td><b>Partita iva</b></td> <td>$entity.getAttribute('partitaiva')}</td></tr> <tr><td><b>Paese</b></td><td>${entity.getAttribute('paese')}</td></tr><tr><td><b>Indirizzo</b></td><td>${entity.getAttribute('Indirizzo')}</td></tr><#assign x = entity.getAttribute('email')?trim >

….</table>

Page 30: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

30

DA RELAZIONALE A NoSQL

Come si mostra un Cliente che è registrato su un relazionale

Page 31: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

31

DA RELAZIONALE A NoSQL

Come si mostra un documento che è registrato sul file system

Page 32: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

32

Nuovo approccio Filosofico(?)

Se tutto è riconducibile a un documento, tutto ha il significato di un testo scritto da un essere umano.

• Semantica• Clusterizzazione• Catergorizzazione

I documenti scritti (informazioni destrutturate) si relazionano a quelli gestiti da sistemi(informazioni strutturate) in modo naturale.

Sarebbe molto costoso senza lo “schema libero” tipico del NoSQL

Page 33: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

33

Caso d’usoAzienda di servizi di consulenza sul lavoro, sicurezza, medicina, ecologia, formazione e privacy. Azienda Knowledge intensive. L'intero processo aziendale è guidato dalla redazione di documenti e dall’assistenza diretta al cliente tramite un help desk telefonico.

“Obiettivo primario ottenere statistiche sulla quantita di lavoro effettuato dal personale per il cliente, cosi da poter gestire meglio il rapporto e verificare l'avanzamento dei progetti”

Fonti dati:• file system con tutti i documenti aziendali divisi per cliente• mail con tutte le comunicazioni da e per il cliente• i centralini telefonici, per tenere sotto controllo le telefonate da e per il cliente• i fax, inserendo anche un modulo di OCR (interno a Bleen) per consentire la ricerca

testuale sul contenuto; • il sistema gestionale interno

Page 34: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

34

Caso d’uso

Strutturate(ER)

De strutturate

Datawarehouse

Conversione (de)strutturate

Business Intelligence

Ricerca

Page 35: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

35

Caso d’uso

Page 36: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

36

Caso d’uso

Page 37: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

37

Caso d’uso

Informazioni strutturate e destrutturate convivono

Page 38: No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013

38

Chiamatemi

Possiamo lavorare su :Motori di ricerca Business IntelligenceSemanticaClusterizzazione e sistemi espertiSviluppo di prodotti a tutto tondo

Gianbattista [email protected]

Brescia via Orzinuovi 20 (500 metri uscita Brescia Ovest)

www.myti.it www.bleen.it www.bim.it