Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni23 pagine

Progetto NoSQL

Caricato da

hypesurges
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni23 pagine

Progetto NoSQL

Caricato da

hypesurges
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 23

Krishnakumaran Sivakumaran - Mat.

468800

Progetto NoSQL
Confronto prestazionale tra i database Oracle e Neo4j

INTRODUZIONE SULLA TEMATICA


Sono stati tanti i cambiamenti a cui la vita della popolazione mondiale si è dovuta
adattare con l'arrivo del COVID-19. Molte delle comuni attività si sono svolte, quando
possibile, da remoto (basti pensare all'insegnamento tramite la didattica a distanza e
allo sviluppo di sistemi per l'identificazione digitale, come lo SPID in Italia, per la
relazione con gli enti pubblici).

Tra i cambiamenti più evidenti non si può non notare l'impennata che hanno subito gli
acquisti online, risposta naturale alle restrizioni dovute alla pandemia.

Secondo la "Financial Crimes Enforcement Network" (FinCEN) è aumentato anche il


numero delle frodi e dei crimini online. In particolar modo sono state identificate le
seguenti tipologie di frodi:

1) impersonificazione: i malintenzionati tentano di sollecitare donazioni, rubare


informazioni personali o distribuire malware impersonando agenzie
governative (ad es. Centri per il controllo e la prevenzione delle malattie),
organizzazioni internazionali (ad es. Organizzazione mondiale della sanità
(OMS)) o organizzazioni sanitarie.

2) Truffe sugli investimenti: truffe sugli investimenti legate al COVID-19. Aziende


quotate in borsa affermano che i loro prodotti o servizi di possono prevenire,
rilevare o curare il Coronavirus.

3) Truffe sui prodotti: aziende che vendono prodotti non approvati o con marchi
errati. FinCEN ha ricevuto segnalazioni relative alla commercializzazione
fraudolenta di forniture relative al COVID-19, come alcune mascherine.

1
Krishnakumaran Sivakumaran - 468800

TECNOLOGIE UTILIZZATE
I DBMS che verranno utilizzati sono:

1. Oracle 19c: database di tipo SQL


2. Neo4j 4.4.3 enterprise: database di tipo NoSQL orientato al grafo

Per gli esperimenti si è fatto uso di una serie di dataset di dimensione crescente (25%,
50%, 75% e 100%) che, nel complesso, rappresentano una struttura dati dove sono
descritte le sentenze alle aziende che sono state giudicate colpevoli di frodi
riconducibili alle categorie elencate nell'introduzione in un arco temporale di circa 2
anni (da marzo 2020 a gennaio 2022). I dataset sono in formato .csv.

L'analisi è stata svolta su DBMS in esecuzione tramite container Docker su una


macchina separata rispetto a quella dove vengono lanciati gli script. Il collegamento
tra le 2 macchine (a cui potremmo associare rispettivamente i ruoli di server e client)
avviene tramite rete LAN.

I dataset per i vari esperimenti sono stati generati attraverso la libreria Faker
disponibile per il linguaggio di programmazione Python (versione 3.10) e nel
medesimo linguaggio sono stati realizzati gli script per eseguire le operazioni previste
per la realizzazione del benchmark in maniera automatizzata. Per semplicità nella
manipolazione dei dati, si è scelto di suddividere i dati da importare nei DBMS in file
.csv separati, ciascuno dei quali rappresenta un elemento differente nelle relazioni tra
i dati.

Il caricamento dei dati nelle tabelle di Oracle è stato realizzato attraverso il tool
SQL*Loader 19.3 fornito da Oracle e già presente nel container. Analogamente, è
stato il tool utilizzato "Neo4j-admin" per il caricamento dei dati, per la creazione dei
nodi e l'aggiunta di "etichette" (label) a ciascun nodo.

2
Krishnakumaran Sivakumaran - 468800

DESCRIZIONE DEI DBMS


Oracle

È un ORDBMS, fa parte della famiglia dei database di tipo SQL. Troviamo, quindi, il
supporto al linguaggio SQL, vantaggio notevole considerando l'espressività che lo
caratterizza e che è definito da uno standard, a differenza dei linguaggi disponibili
nelle soluzioni NoSQL.

È presente anche il supporto al linguaggio PL/SQL sviluppato da Oracle che consente


di aumentare le funzionalità offerte dal database, come la creazione di funzioni,
trigger e cursori.

È presente un client desktop, SQL Developer, ed il supporto tramite driver/librerie


all'interazione tramite numerosi linguaggi di programmazione.

Neo4j

Rientra nella categoria dei database "graph-oriented". Nonostante sia un DBMS


NoSQL consente di poter definire nativamente il concetto di relazione. È sviluppato
in Java ed offre interfacce grafiche tramite browser e applicativi desktop che
consentono la visualizzazione dei dati e l'interazione con i database. La struttura a
grafo di Neo4j risulta essere particolarmente utile nei casi in cui la struttura che si
vuole rappresentare risulti essere facilmente approssimabile ad un grafo. Esempi di
questo sono la rappresentazione di alberi astratti oppure le relazioni tra gli utenti nei
social network. Viene molto utilizzato nel campo dell'intelligenza artificiale.

L'informazione è contenuta nelle proprietà nei nodi che compongono il grafo. Gli archi
che collegano i singoli nodi sono sempre orientati, rappresentano le relazioni tra le
entità, e possono avere anch'essi delle proprietà.

Il linguaggio impiegato per l'interazione con DBMS è Cypher, creato con l'intento di
essere il più semplice ed intuitivo possibile nella sintassi. Abbiamo anche la possibilità
di poter interagire con il DB sfruttando anche altri linguaggi di programmazione
attraverso degli adattatori/driver ufficiali oppure sviluppati dalla community.

3
Krishnakumaran Sivakumaran - 468800

PROGETTAZIONE
Come detto precedentemente, il contenuto dei file che costituiscono i vari dataset
rappresentano uno storico delle sentenze emesse nei confronti delle varie aziende. Si
è scelto di inserire record provenienti da tutto il mondo e le aziende, per semplicità,
sono tutte multinazionali.

Data model di Oracle

Di seguito lo schema che descrive la struttura delle tabelle presenti all'interno dei
database e il diagramma E-R.

4
Krishnakumaran Sivakumaran - 468800

Diagramma E-R

La tabella delle sentenze è costituita principalmente da foreign-key in maniera tale da


collegare le informazioni suddivise sulle altre tabelle. In particolar modo, le tabelle
dove confluiscono le informazioni principali dei dataset utilizzati sono AZIENDE,
SANZIONI e GIUDICI. Le altre tabelle (TRIBUNALI, FRODI, METODI_FRODE,
PARTI_LESE) contengono elementi che possono essere comuni a tutte le sanzioni.

Data model di Neo4j

La struttura del grafo risulta essere incentrata sulle sanzioni e, considerando la


struttura ed i legami esposti nella descrizione del datamodel usato con Oracle, ciò
risulta naturale. Le relazioni tra le varie tipologie di nodi consentono di poter
facilmente ricostruire tutte le informazioni che sono legate ad una specifica sentenza.

5
Krishnakumaran Sivakumaran - 468800

IMPLEMENTAZIONE
Gli script realizzati per l’esecuzione automatizzata del benchmark per Oracle e Neo4j
presentano una struttura simile. Possiamo distinguere 3 sezioni principali:

1. caricamento dei dataset


2. esecuzione delle query
3. cancellazione del contenuto del database

Il dataset per le sanzioni contiene al massimo 250000 record, quello dei giudici
100000 e quello delle aziende 200000.

Inizialmente erano stati creati dataset di maggiori dimensioni (fino al milione di record)
ma il processo di creazione delle relazioni tra i nodi in neo4j richiede un quantitativo
di risorse tale da generare l’arresto del container. Spesso dopo questi arresti anomali
il container non poteva più essere avviato e doveva essere sostituito. Con dimensioni
non troppo superiori ai 250000 record per il dataset delle sanzioni viene restituito il
seguente messaggio:

Query failed: {code: Neo.TransientError.General.OutOfMemoryError}


{message: There is not enough memory to perform the current task. Please
try increasing 'dbms.memory.heap.max_size' in the neo4j configuration
(normally in 'conf/neo4j.conf' or, if you are using Neo4j Desktop, found
through the user interface) or if you are running an embedded
installation increase the heap by using '-Xmx' command line flag, and
then restart the database.}

Descrizione delle query usate

In ordine, le query usate hanno i seguenti obiettvi

1. Ricerca degli id delle condanne che sono state emesse in Italia


2. Conteggio del numero di sentenze emesse tra due date dove le vittime sono
aziende e dove la sanzione è maggiore di 80.000. Mostra il conteggio
suddividendo in base al tribunale
3. Conteggio del numero di aziende con un numero di dipendenti maggiore di
35.000 che sono state punite per crimini contro privati
4. Ricerca delle aziende che hanno truffato dei privati, punite con una sanzione di
almeno 150.000€, che sono state emesse nella corte di uno stato il cui nome è
composto da due parole (come la Costa d'Avorio), che hanno un numero di
dipendenti minore di 50.000, e che hanno usato il metodo del phishing.
Ordinamento in base alla cifra della sanzione in ordine decrescente.

6
Krishnakumaran Sivakumaran - 468800

Oracle

Per quanto riguarda il caricamento, come detto in precedenza, avviene attraverso


l’ausilio dello strumento a riga di comando SQL*Loader. Il collegamento tramite ssh
alla macchina “server” avviene attraverso la libreria di Python “paramiko”. In questo
modo vengono inviati i comandi necessari ad avviare lo strumento all’interno del
container in maniera automatica.

Il setup e l’interazione con il container Oracle non è stata del tutto semplice, spesso a
causa di variabili di ambiente che dovevano essere necessariamente settate
dall’esterno. Sono state incontrate delle difficoltà, ad esempio, nella condivisione di
una cartella tra il filesystem locale dell’host e quello del container. A differenza di
Neo4j, è stato usato il comando docker cp per trasferire i dataset all’interno del
container. Completato il caricamento è possibile lanciare il tool per l'inserimento.

Esempio:

# caricamento dei dataset nel filesystem del container

cd /home/mksiva/neo4j/data/ctl && docker cp ./ oracleDB:/home/oracle/ &&


cd ../dataset && docker cp ./ oracleDB:/home/oracle/

Vengono passati come argomenti di SQL*Loader non solo i file .csv ma anche i
“control file”, con estensione .ctl, che sono necessari per il caricamento tramite sqlldr.
Contengono infatti le istruzioni per il posizionamento delle informazioni nelle tabelle.

Esempio:

# esempio di inserimento tramite sqlldr

docker exec -e ORACLE_SID=ORCLCDB oracleDB sqlldr userid=system/password


control=/home/oracle/tribunali.ctl data=/home/oracle/tribunali.csv skip=1

# esempio di control file

load data
infile 'ds1_aziende.csv' "str '\n'"
append
into table SYS.AZIENDE
fields terminated by ','
OPTIONALLY ENCLOSED BY '"' AND '"'
trailing nullcols

7
Krishnakumaran Sivakumaran - 468800

( ID_AZIENDA,
NOME CHAR(60),
SEDE CHAR(100),
DIRETTORE CHAR(30),
TELEFONO,
EMAIL CHAR(60),
NUMERO_DIPENDENTI,
BUDGET
)

Una volta completato il caricamento dei dati all’interno delle tabelle del database si
procede con la fase di esecuzione delle query. Queste vengono passate come
argomento del metodo execute di un oggetto della libreria cx_Oracle disponibile per
Python. Una limitazione di Oracle, se il DBMS è in esecuzione tramite container, non
permette di creare nuovi utenti per l'interazione con il database. Per la connessione al
database è stato utilizzato l'utente preesistente "SYS".

Per la misura del tempo di esecuzione delle query si è fatto uso della libreria time e
della sua funzione time() in maniera tale da salvare la durata dell’intervallo di tempo
necessario all’istruzione. Dato che il valore generato da time è espresso in secondi,
moltiplichiamo opportunamente per ottenere il valore in millisecondi.

select sanzioni.id_sentenza from sanzioni,tribunali where


sanzioni.tribunale = tribunali.id_tribunale and tribunali.stato =
'Italy'

# esempio di calcolo del tempo di esecuzione

prima = time()
cursore.execute(query)
dopo = time()
tempo_esecuzione = (dopo-prima)*1000

Ciascuna delle query viene eseguita 31 volte per ciascun dataset.

Una volta terminata l’esecuzione delle query si svuotano le tabelle e, prima di passare
eventualmente al dataset successivo, si procede alla cancellazione della cache del
database. Come altri DBMS, anche Oracle fa uso di meccanismi di caching per
migliorare le prestazioni.

8
Krishnakumaran Sivakumaran - 468800

Ai fini dell’analisi che si sta portando avanti è opportuno cancellare i dati presenti in
maniera tale da poter valutare meglio le prestazioni del sistema.

# svuoto la cache
cursore.execute("alter system flush buffer_cache")
cursore.execute("alter system flush shared_pool")

Query eseguite

# query 1
select sanzioni.id_sentenza from sanzioni,tribunali where
sanzioni.tribunale = tribunali.id_tribunale and tribunali.stato =
'Italy'

# query 2
SELECT tribunali.stato, COUNT(*) FROM sanzioni, parti_lese,
tribunali WHERE sanzioni.sanzione_econ > 80000 AND (
sanzioni.data_sent BETWEEN TO_DATE('22-05-20', 'DD/MM/YY') AND
TO_DATE('31-12-20', 'DD/MM/YY') )
AND sanzioni.cat_parte_lesa IN (SELECT
parti_lese.id_tipo_soggetto FROM parti_lese WHERE
parti_lese.descrizione = 'aziende')
AND tribunali.id_tribunale = sanzioni.tribunale
GROUP BY tribunali.stato

# query 3
SELECT * FROM aziende, sanzioni WHERE aziende.id_azienda IN (SELECT
aziende.id_azienda FROM aziende WHERE numero_dipendenti > 35000)
AND sanzioni.azienda_sanz = aziende.id_azienda AND (
sanzioni.cat_parte_lesa IN (SELECT parti_lese.id_tipo_soggetto
FROM parti_lese
WHERE parti_lese.descrizione = 'privati'))ORDER BY
sanzioni.data_sent DESC

# query 4
select aziende.id_azienda from aziende, sanzioni, parti_lese,

9
Krishnakumaran Sivakumaran - 468800

tribunali, metodi_frode
where sanzioni.azienda_sanz = aziende.id_azienda
and sanzioni.sanzione_econ >= 150000
and sanzioni.tribunale = tribunali.id_tribunale and
tribunali.stato like '% %'
and aziende.numero_dipendenti < 50000
and metodi_frode.metodo = 'phishing'
order by sanzioni.sanzione_econ desc

Neo4j

La struttura del codice realizzato è analoga allo script creato per gli esperimenti con
Oracle. In questo caso l’intero processo è più agevole in quanto il container risulta
essere già configurato per la maggior parte delle operazioni.

Il tool usato per il caricamento dei dati nel database, neo4j-admin, è anch’esso a riga
di comando e consente di poter inserire nella fase di caricamento delle informazioni
anche le label da associare a ciascun nodo. Il processo è in generale molto semplice
ma non veloce come SQL*Loader. L’opzione --force consente di poter forzare la
sovrascrittura delle informazioni già contenute nel database.

# comando anch'esso eseguito tramite ssh attraverso paramiko

docker exec -i enterprise neo4j-admin import


--nodes=aziende=/var/lib/neo4j/data/dataset/"+ds+"_aziende.csv
--nodes=giudici=/var/lib/neo4j/data/dataset/"+ds+"_giudici.csv
--nodes=tribunali=/var/lib/neo4j/data/dataset/tribunali.csv
--nodes=sanzioni=/var/lib/neo4j/data/dataset/"+ds+"_sanzioni.csv
--nodes=frodi=/var/lib/neo4j/data/dataset/frodi.csv
--nodes=metodi_frode=/var/lib/neo4j/data/dataset/metodi.csv
--nodes=parti_lese=/var/lib/neo4j/data/dataset/parti_lese.csv
--force

Di default i dati inseriti tramite neo4j-admin vengono salvati nei nodi come delle
stringhe. Possiamo specificare il tipo di dato desiderato per l'importazione all'interno
del file csv modificando l'header del file. Nel caso di Oracle il tipo di dato viene
specificato nel control file (file .ctl) che viene passato in input ad SQL*Loader.

10
Krishnakumaran Sivakumaran - 468800

# esempio header csv per Oracle

KEY,NOME,SEDE,DIRETTORE,TELEFONO,EMAIL,NUMERO_DIPENDENTI,BUDGET

# esempio header per neo4j-admin

KEY,NOME,SEDE,DIRETTORE,TELEFONO,EMAIL,NUMERO_DIPENDENTI:int,BUDGET:
int

Il caricamento dei dati tramite il tool, per quanto vada a buon fine, in alcune
circostanze può non mostrare alcun effetto immediato. Ciò è più evidente se si fa uso
dell’applicativo Neo4j Desktop. La soluzione più efficace risulta quella di riavviare il
servizio del database, in questo caso fermare ed avviare nuovamente il container.
Nell’ambito di questi esperimenti, il container verrà riavviato più volte per consentire
di svuotare la cache che il sistema può avere generato per le stesse ragioni viste in
Oracle.

Dopo il riavvio si procede alla creazione delle relazioni, quindi degli archi, tra i vari
nodi creati a seguito dell’importazione.

# esempio di creazione delle relazioni tra i nodi

db.query("match (a:sanzioni),(b:aziende) where a.AZIENDA_SANZ =


b.KEY create (a)-[r:condanna]->(b) return a,b")

L’esecuzione e la raccolta dei tempi delle query risulta, generalizzando, analoga per
quanto riguarda la strutturazione a quanto visto negli esperimenti di Oracle.
L'esecuzione delle query è realizzata tramite gli strumenti forniti dalla libreria ufficiale
di Neo4j per Python.

11
Krishnakumaran Sivakumaran - 468800

Query eseguite

# query 1
match (a:sanzioni)-[r:sede]->(b:tribunali {TRIBUNALE : "Italy"})
return a,b

# query 2

match (s:sanzioni)-[r:sede]->(b:tribunali) with s,b match


(s)-[r:vittima]->(p:parti_lese {DESCRIZIONE:"aziende"}) where
s.TRIBUNALE=b.KEY and s.SANZIONE_ECON > 80000 and "2020-05-22"<=
s.DATA_SENT <= "2020-12-31" return b.TRIBUNALE,count(s)

# query 3

match(a:aziende) where a.NUMERO_DIPENDENTI > 35000 with a match


(s:sanzioni)-[r:condanna]->(a) with a,s match
(s)-[r:vittima]->(p:parti_lese {DESCRIZIONE:"privati"}) return a,s,p
order by s.DATA_SENT desc

# query 4

match (azienda:aziende)-[r:condanna]->(sanzione:sanzioni) with


azienda,sanzione match (sanzione)-[r:vittima]->(plesa:parti_lese
{DESCRIZIONE: "privati"}) with azienda,sanzione,plesa match
(sanzione)-[s:sede]->(tribunale:tribunali {STATO:"* *"}) with
azienda,sanzione,plesa,tribunale match
(sanzione)-[r:frode_attraverso]->(metodo:metodi_frode) where
sanzione.SANZIONE_ECON >= 150000 and
azienda.NUMERO_DIPENDENTI < 50000 and metodo.METODO = "phishing"
return azienda,sanzione,plesa,tribunale,metodo

12
Krishnakumaran Sivakumaran - 468800

TABELLE DEI RISULTATI - valori espressi in millisecondi


Query 1 - Oracle
Dataset ds1 ds2 ds3 ds4
Prova 0 6,762266159 7,85112381 5,858421326 5,749702454
Prova 1 3,294467926 3,074645996 2,410650253 2,517223358
Prova 2 3,097772598 2,788543701 2,557754517 2,314567566
Prova 3 2,692461014 3,101110458 2,813816071 2,087116241
Prova 4 2,619743347 2,743959427 2,445936203 2,444028854
Prova 5 2,470970154 2,549648285 2,70819664 2,494096756
Prova 6 2,575874329 2,497196198 2,317905426 2,522945404
Prova 7 2,515554428 2,446174622 2,778291702 2,52532959
Prova 8 2,201080322 2,846002579 2,301454544 2,690792084
Prova 9 3,701686859 2,784252167 2,679347992 2,62260437
Prova 10 2,624034882 2,779483795 2,29716301 4,259586334
Prova 11 4,137277603 2,883911133 2,645015717 3,150701523
Prova 12 2,537488937 2,711057663 2,45642662 2,398252487
Prova 13 3,212690353 2,603054047 2,97999382 2,921104431
Prova 14 2,666473389 2,949953079 1,963376999 2,449274063
Prova 15 3,265619278 3,610610962 2,306938171 2,401351929
Prova 16 2,66289711 2,757549286 2,941846848 2,496957779
Prova 17 2,601861954 2,980947495 2,349376678 2,614498138
Prova 18 3,296852112 2,879142761 3,084659576 10,21957397
Prova 19 2,612352371 3,549098969 2,385139465 2,487659454
Prova 20 2,689838409 3,045797348 9,999275208 2,407550812
Prova 21 2,743721008 3,510475159 2,27355957 2,69818306
Prova 22 2,633094788 2,919197083 2,265453339 2,267122269
Prova 23 2,816200256 3,022432327 2,410650253 2,329349518
Prova 24 2,578735352 2,761125565 2,109289169 2,663850784
Prova 25 3,337144852 3,622055054 2,496480942 2,268314362
Prova 26 2,156496048 3,097295761 2,403974533 2,541542053
Prova 27 2,85243988 3,704309464 2,521038055 2,447366714
Prova 28 2,552986145 2,955436707 2,572536469 2,958774567
Prova 29 2,709627151 2,727031708 2,983570099 3,05056572
Prova 30 2,627372742 3,507375717 2,470016479 2,378940582
Prova 31 2,513170242 2,790212631 2,772092819 2,830028534
Media 2,80638664 2,974164101 2,764555716 2,8535243
Dev. Standard 0,424239468 0,345877692 1,368587846 1,420851472
Confidenza 0,1518093544 0,1237684682 0,4897338718 0,5084358267

13
Krishnakumaran Sivakumaran - 468800

Query 1 - Neo4j

Dataset ds1 ds2 ds3 ds4


Prova 0 769,4032192 754,0450096 791,2056446 828,1083107
Prova 1 58,00008774 89,656353 682,2481155 162,5745296
Prova 2 55,32670021 92,59533882 108,2501411 146,1524963
Prova 3 57,04450607 78,88627052 108,4990501 145,9195614
Prova 4 50,21810532 83,11080933 109,2300415 147,462368
Prova 5 47,14107513 82,5843811 108,8378429 147,1111774
Prova 6 46,48995399 80,09123802 107,9638004 142,9421902
Prova 7 44,78406906 78,06968689 110,0766659 144,1316605
Prova 8 43,26510429 80,4476738 110,5849743 143,6488628
Prova 9 47,6539135 78,73725891 109,9312305 142,3957348
Prova 10 117,8808212 165,9224033 217,5834179 193,5079098
Prova 11 49,56102371 78,70078087 109,9553108 142,2429085
Prova 12 49,89409447 81,21919632 121,7281818 142,4283981
Prova 13 45,57061195 79,74600792 108,8633537 142,9238319
Prova 14 42,71960258 79,65254784 109,3285084 145,6596851
Prova 15 44,12937164 78,85074615 109,2460155 142,4207687
Prova 16 43,94578934 81,1662674 108,330965 140,8822536
Prova 17 45,27163506 83,39118958 108,4167957 145,8933353
Prova 18 44,97265816 79,01859283 107,6803207 142,758131
Prova 19 46,71096802 526,3903141 130,4130554 140,6486034
Prova 20 44,83556747 83,17470551 107,9032421 155,7414532
Prova 21 46,48041725 80,2834034 108,5355282 151,3967514
Prova 22 44,78192329 94,13146973 107,5384617 141,0963535
Prova 23 44,08097267 77,68249512 108,6034775 140,4852867
Prova 24 45,41826248 79,672575 106,6634655 153,2225609
Prova 25 262,4530792 77,85153389 108,8466644 157,0181847
Prova 26 43,5461998 80,41667938 110,4383469 144,3991661
Prova 27 41,37325287 74,50413704 109,9052429 141,6592598
Prova 28 44,48008537 81,74657822 129,4822693 144,4079876
Prova 29 44,36087608 82,13829994 107,4402332 153,3226967
Prova 30 43,39742661 79,24580574 108,4799767 154,6530724
Prova 31 40,95339775 76,14326477 108,5577011 1096,115828
Media 55,7013404 98,23316143 132,5665289 178,5555809
Dev. Standard 40,66347625 81,01604608 103,963472 170,5920881
Confidenza 14,55097071 28,99068704 37,20216706 61,04447301

14
Krishnakumaran Sivakumaran - 468800

Query 2 - Oracle

Dataset ds1 ds2 ds3 ds4


Prova 0 116,7898178 216,8433666 385,5643272 438,9536381
Prova 1 99,48539734 244,4212437 344,5103168 430,9048653
Prova 2 116,6374683 214,2384052 349,9376774 440,980196
Prova 3 109,0662479 251,8882751 347,014904 439,9962425
Prova 4 112,4901772 234,7772121 341,4158821 440,2801991
Prova 5 112,1776104 212,6488686 336,9085789 412,5182629
Prova 6 112,2124195 261,8737221 332,2365284 469,2437649
Prova 7 109,454155 243,9782619 349,9031067 441,603899
Prova 8 108,4520817 235,612154 309,3731403 454,3125629
Prova 9 110,3606224 213,6664391 310,6331825 443,4261322
Prova 10 109,2061996 210,0338936 319,7376728 438,5662079
Prova 11 109,6081734 263,6227608 410,9375477 440,1481152
Prova 12 114,9008274 224,2903709 336,5273476 437,2119904
Prova 13 113,1389141 233,8061333 341,8021202 437,785387
Prova 14 109,7304821 242,3021793 336,4963531 452,4922371
Prova 15 111,7603779 329,2052746 334,1414928 413,4964943
Prova 16 110,1102829 211,2691402 338,1860256 467,1833515
Prova 17 109,8794937 214,5142555 327,7010918 441,5926933
Prova 18 111,3641262 286,6227627 312,6413822 452,8996944
Prova 19 109,6389294 232,3980331 381,4902306 415,17663
Prova 20 112,8869057 234,9131107 311,8932247 480,1402092
Prova 21 110,530138 236,0243797 360,6095314 425,7354736
Prova 22 112,5442982 235,2240086 339,6024704 464,1299248
Prova 23 110,2020741 224,2307663 337,3901844 439,084053
Prova 24 109,705925 231,8472862 337,1911049 449,0637779
Prova 25 108,4370613 236,089468 335,8776569 433,8107109
Prova 26 110,8283997 226,0439396 333,9641094 437,5154972
Prova 27 109,7986698 236,0255718 338,1011486 447,8378296
Prova 28 109,2019081 209,9490166 344,5680141 434,4248772
Prova 29 110,9099388 208,7225914 343,8565731 436,9242191
Prova 30 109,6458435 277,7252197 335,9723091 434,2317581
Prova 31 111,6309166 236,7119789 335,1800442 428,8871288
Media 110,5160021 237,2476362 339,2193856 441,3420769
Dev. Standard 2,75906032 25,75744636 19,67287087 15,31668868
Confidenza 0,9872989133 9,217014435 7,03971707 5,480905936

15
Krishnakumaran Sivakumaran - 468800

Query 2 - Neo4j

Dataset ds1 ds2 ds3 ds4


Prova 0 1696,469069 1616,438866 1690,634012 1792,179585
Prova 1 425,8053303 316,5404797 605,6370735 625,8330345
Prova 2 199,5937824 308,5391521 522,1371651 501,0681152
Prova 3 206,5253258 309,1800213 499,8345375 392,8263187
Prova 4 202,3384571 280,2577019 524,3563652 425,9569645
Prova 5 206,4054012 330,4486275 413,8412476 423,6185551
Prova 6 206,2315941 307,6179028 406,7153931 408,9429379
Prova 7 204,2050362 410,3431702 407,7956676 511,767149
Prova 8 203,2952309 305,4308891 397,6578712 493,2980537
Prova 9 206,3500881 307,6303005 420,6902981 417,1347618
Prova 10 407,3135853 614,5734787 704,8738003 830,5790424
Prova 11 307,8944683 306,7514896 627,6714802 538,2778645
Prova 12 204,2834759 310,8315468 511,526823 587,6832008
Prova 13 204,6263218 360,2426052 499,0653992 614,6173477
Prova 14 204,4818401 353,749752 523,9474773 498,456955
Prova 15 205,078125 304,9006462 410,1758003 422,9879379
Prova 16 204,2479515 310,8708858 307,0309162 389,8396492
Prova 17 204,8416138 303,8437366 409,3239307 415,7915115
Prova 18 204,5338154 307,6958656 393,5394287 421,4730263
Prova 19 206,3848972 245,6104755 311,7883205 409,7931385
Prova 20 204,7793865 266,7586803 318,7315464 396,8236446
Prova 21 204,5590878 309,6752167 409,8131657 422,1279621
Prova 22 205,3678036 205,3804398 410,4993343 408,9789391
Prova 23 203,2279968 305,1617146 395,0312138 409,4502926
Prova 24 204,2565346 306,0894012 321,5582371 397,9902267
Prova 25 120,0196743 307,5377941 407,980442 524,0013599
Prova 26 118,3793545 308,1958294 409,1193676 499,7189045
Prova 27 170,8242893 305,239439 408,9224339 420,8989143
Prova 28 204,8516273 301,466465 309,6344471 385,2891922
Prova 29 121,5968132 314,0566349 396,4211941 421,7095375
Prova 30 114,7055626 307,1327209 319,316864 423,6185551
Prova 31 117,8028584 307,6016903 396,6398239 407,8073502
Media 206,606688 317,3985404 432,2992602 466,0761433
Dev. Standard 68,03272603 64,33559285 96,26274384 95,46278199
Confidenza 24,344751 23,02177319 34,44654751 34,1602901

16
Krishnakumaran Sivakumaran - 468800

Query 3 - Oracle

Dataset ds1 ds2 ds3 ds4


Prova 0 178,8651943 451,0095119 650,8419514 753,1833649
Prova 1 292,5584316 388,4036541 496,5202808 601,0167599
Prova 2 232,6676846 293,1377888 417,1829224 627,8579235
Prova 3 224,8594761 308,9375496 474,3976593 585,303545
Prova 4 204,2834759 391,7548656 440,110445 673,0666161
Prova 5 259,8195076 341,404438 424,4999886 662,8699303
Prova 6 170,0003147 345,1850414 498,1517792 607,884407
Prova 7 202,8181553 365,1134968 494,2297935 675,9777069
Prova 8 235,1205349 306,6608906 422,9691029 603,5838127
Prova 9 260,2255344 310,5812073 469,0289497 581,0034275
Prova 10 179,4121265 329,7610283 482,1197987 624,1166592
Prova 11 273,4434605 353,5058498 498,5377789 570,2040195
Prova 12 180,9866428 349,83778 502,9540062 568,0811405
Prova 13 192,3139095 341,3264751 424,7119427 664,1862392
Prova 14 184,9637032 337,1572495 526,4735222 562,5557899
Prova 15 231,408596 279,7553539 485,6176376 650,4802704
Prova 16 176,0058403 299,6160984 497,273922 672,6443768
Prova 17 200,2449036 316,6489601 502,3369789 667,3116684
Prova 18 210,0255489 280,1070213 422,8208065 598,1771946
Prova 19 171,5624332 294,6615219 454,9219608 569,0808296
Prova 20 281,134367 360,0687981 452,9361725 650,1803398
Prova 21 267,1129704 390,2037144 498,452425 634,2704296
Prova 22 222,9468822 278,9826393 521,3961601 594,3629742
Prova 23 254,689455 370,2337742 452,1024227 567,738533
Prova 24 215,0170803 288,3896828 424,4861603 624,7441769
Prova 25 199,7954845 311,4953041 483,6456776 583,8427544
Prova 26 269,1011429 393,3475018 527,6825428 567,6884651
Prova 27 266,1232948 367,4776554 532,9165459 644,1969872
Prova 28 263,2966042 281,1901569 511,1167431 733,8955402
Prova 29 170,8116531 298,8865376 466,306448 578,0084133
Prova 30 183,0234528 312,5317097 473,3538628 604,9060822
Prova 31 209,9103928 278,7737846 595,5042839 662,3411179
Media 222,1188084 327,9076622 479,8309265 619,7283268
Dev. Standard 37,68686786 37,60216609 40,79192505 43,47846453
Confidenza 13,48582466 13,45551507 14,59693468 15,55828282

17
Krishnakumaran Sivakumaran - 468800

Query 3 - Neo4j

Dataset ds1 ds2 ds3 ds4


Prova 0 5512,60066 10392,60101 14655,23124 21228,62172
Prova 1 4698,014736 10181,27537 14663,11049 19985,34155
Prova 2 4845,807314 9672,137499 14332,00788 19693,01724
Prova 3 4711,182594 9758,543253 14208,19259 19936,3699
Prova 4 4873,152494 9966,990471 14235,79407 19486,6004
Prova 5 4796,410084 9901,660204 14250,46992 19415,07816
Prova 6 4733,045101 9788,153648 14210,7923 19262,16602
Prova 7 4747,867346 9842,846394 14143,67747 19080,09696
Prova 8 4755,162716 9535,553455 14388,04746 19669,45124
Prova 9 4824,154377 9543,402433 14901,01862 19654,6576
Prova 10 4857,445955 9869,661331 15110,85725 19686,38206
Prova 11 5278,843403 9999,132872 14812,79588 19519,36722
Prova 12 5091,130733 9633,376598 14677,0339 19634,15909
Prova 13 4793,004274 9748,139858 14585,90698 19435,49705
Prova 14 4725,016594 9781,977654 14526,13759 19283,15115
Prova 15 4821,781397 9743,184328 15743,01815 19484,60197
Prova 16 4986,004353 9858,323336 14468,07718 20600,78239
Prova 17 5293,320179 9654,731989 14465,49773 19550,84109
Prova 18 5265,392542 9407,086372 14612,36358 19856,26101
Prova 19 5248,123646 9467,534065 14707,15952 19269,54746
Prova 20 5017,334461 9490,78536 14758,1315 19699,11075
Prova 21 4728,697062 9540,287256 14515,50078 19893,04018
Prova 22 4845,986128 9453,330278 14608,52575 19674,58892
Prova 23 4869,321823 9464,20002 14631,97803 19508,66723
Prova 24 4755,101919 9509,246826 14540,37905 19541,54396
Prova 25 4754,08411 9463,795424 14573,29631 19431,76174
Prova 26 4613,019466 9475,830555 14426,2538 19423,30098
Prova 27 4645,12372 9446,604013 14520,69521 19633,85201
Prova 28 4787,128687 9448,571682 14567,90519 19482,39613
Prova 29 4836,084604 9512,859583 14609,37476 19276,8898
Prova 30 4735,427856 9418,730974 14610,3313 19570,07098
Prova 31 4848,307133 9482,579708 14572,05176 19578,17984
Media 4863,886349 9647,113962 14579,88329 19587,63781
Dev. Standard 187,8088254 204,8061728 300,7931206 278,8601872
Confidenza 67,2052901 73,28760101 107,635458 99,78700276

18
Krishnakumaran Sivakumaran - 468800

Query 4 - Oracle

Dataset ds1 ds2 ds3 ds4


Prova 0 303,5066128 587,1479511 766,2887573 1090,821743
Prova 1 277,3942947 552,7727604 779,8223495 1046,390772
Prova 2 325,4022598 483,2003117 830,0521374 1192,512989
Prova 3 304,6574593 567,6198006 863,4624481 1008,99148
Prova 4 306,3476086 568,3195591 809,2699051 1105,52597
Prova 5 270,370245 571,2928772 818,8290596 1111,786127
Prova 6 315,8917427 573,8403797 839,650631 1105,980396
Prova 7 299,0498543 571,4886189 827,3487091 1114,460707
Prova 8 278,7742615 566,824913 744,7574139 1100,117922
Prova 9 250,45228 554,2888641 812,6044273 1109,784603
Prova 10 334,4087601 562,030077 747,5559711 1034,985542
Prova 11 294,8005199 566,8854713 756,3793659 1021,678448
Prova 12 312,0822906 492,9180145 776,8421173 1016,407967
Prova 13 304,9242496 492,1860695 840,2590752 1019,802809
Prova 14 266,7386532 492,9354191 744,3978786 1013,062716
Prova 15 249,8142719 492,125988 766,0839558 1103,616238
Prova 16 329,2460442 498,4176159 828,9904594 1039,224386
Prova 17 676,9323349 576,5926838 848,8903046 1013,827801
Prova 18 246,5004921 569,3349838 771,3291645 1086,922884
Prova 19 270,5545425 574,0535259 842,2315121 1094,284534
Prova 20 300,2028465 613,4595871 807,9586029 1000,459433
Prova 21 296,0612774 572,8964806 836,1179829 1062,764168
Prova 22 302,6371002 501,4789104 777,3728371 1079,28133
Prova 23 318,5052872 540,3556824 752,8283596 1077,02446
Prova 24 298,7942696 494,1418171 815,1109219 1078,155756
Prova 25 303,3359051 536,2274647 829,6313286 1056,082487
Prova 26 249,2589951 556,7140579 850,744009 1010,135651
Prova 27 246,6111183 491,4772511 823,2312202 1049,177885
Prova 28 247,0445633 561,2878799 745,8708286 1078,235865
Prova 29 305,1261902 551,3453484 791,9266224 1080,874443
Prova 30 296,3793278 561,4874363 835,1068497 1098,025322
Prova 31 303,9367199 577,3906708 825,8450031 1072,936296
Media 302,6527666 544,6900168 804,5323049 1067,17798
Dev. Standard 74,24451227 35,95067133 36,87008611 43,35747356
Confidenza 26,56756931 12,86454612 13,19354843 15,51498756

19
Krishnakumaran Sivakumaran - 468800

Query 4 - Neo4j

Dataset ds1 ds2 ds3 ds4


Prova 0 998,5132217 1121,963263 1317,073584 1397,621393
Prova 1 204,788208 283,7438583 409,4872475 512,1872425
Prova 2 204,8888206 306,9624901 306,7743778 511,7604733
Prova 3 204,7994137 307,1835041 307,6469898 511,459589
Prova 4 204,5826912 206,4604759 306,9500923 512,2675896
Prova 5 205,0375938 305,1605225 307,4362278 409,4290733
Prova 6 204,5559883 307,1746826 307,0766926 409,6372128
Prova 7 90,28792381 307,2831631 306,8652153 409,126997
Prova 8 90,0914669 204,5331001 273,4849453 512,2532845
Prova 9 89,66374397 204,9362659 340,8288956 409,1398716
Prova 10 239,6931648 511,6856098 511,8169785 714,5421505
Prova 11 207,5300217 409,4443321 409,5034599 514,7497654
Prova 12 204,3423653 307,3039055 409,4667435 511,1374855
Prova 13 204,7963142 307,3701859 270,1618671 512,5908852
Prova 14 109,8201275 204,4284344 343,9564705 409,3601704
Prova 15 121,6745377 204,6210766 307,4054718 409,0476036
Prova 16 122,938633 204,5915127 307,2557449 409,5292091
Prova 17 157,3629379 205,2307129 307,6667786 417,2878265
Prova 18 204,7626972 204,1137218 305,9747219 402,0934105
Prova 19 92,04745293 204,8764229 307,7690601 409,267664
Prova 20 90,05665779 204,8096657 306,7107201 409,4576836
Prova 21 97,42093086 204,7607899 307,3227406 408,9980125
Prova 22 90,62767029 204,5500278 259,8905563 409,6503258
Prova 23 90,685606 204,552412 354,3317318 409,9843502
Prova 24 94,49577332 204,7755718 307,4817657 409,6672535
Prova 25 93,16182137 204,9205303 314,6951199 409,1203213
Prova 26 89,75028992 204,4663429 298,7318039 409,614563
Prova 27 90,33894539 204,6196461 307,6884747 409,6360207
Prova 28 89,96748924 205,0495148 409,0256691 409,7163677
Prova 29 89,66875076 204,282999 307,1541786 409,1029167
Prova 30 90,3737545 205,10149 306,7498207 409,9702835
Prova 31 97,54133224 204,2887211 307,0378304 409,1765881
Media 137,6694556 246,8800545 326,9144643 445,83749
Dev. Standard 55,1989672 73,12206696 52,01177284 67,52473585
Confidenza 19,75233377 26,1659148 18,61183187 24,16297239

20
Krishnakumaran Sivakumaran - 468800

GRAFICI

21
Krishnakumaran Sivakumaran - 468800

22
Krishnakumaran Sivakumaran - 468800

CONCLUSIONI
Da quanto risulta dagli esperimenti svolti, è possibile notare che, con datamodel di
questa tipologia, le prestazioni di Oracle risultano essere generalmente superiori,
specialmente considerando i tempi misurati per la query numero 3. Notevole risulta
essere il caso della quarta query dove possiamo notare che, nonostante i tempi per la
prima esecuzione (quindi successiva all'eliminazione della cache) siano minori per
Oracle, Neo4j riesce ad avere prestazioni in media superiori.

Osservando i grafici si può notare gli effetti del caching sui tempi di esecuzione delle
query, in particolare in Neo4j: per ciascun dataset, dopo aver svuotato le informazioni
salvate in memoria con i meccanismi appositi, è possibile notare come la prima
esecuzione, rappresentata come colonna a parte, richieda più tempo rispetto alle
esecuzioni successive (tranne in alcuni casi).

Per quanto riguarda l’interazione con i DMBS, il linguaggio SQL rappresenta un


vantaggio notevole a favore di Oracle con la sua espressività, ma ciò non copre la
complessità necessaria per poter gestire l’installazione del software e la sua
esecuzione. L’esecuzione tramite container, nonostante in genere rappresenti un
metodo che consente di semplificare il processo di setup, in questo caso non si
traduce in un buon rapporto vantaggi/svantaggi. L’utilizzo del software SQL Developer
è stato soddisfacente, costituisce un ottimo sistema per l’interazione con il database
grazie alle numerose funzioni disponibili.

Passando a Neo4j, tutto risulta essere molto semplice ed immediato. Il linguaggio


Cypher promette di essere studiato/sviluppato per essere intuitivo e, per quanto si è
potuto constatare, le aspettative sono in generale soddisfatte. Il software desktop
presenta una interfaccia moderna e user-friendly.

Nel corso degli esperimenti si è potuto osservare come il database Oracle sia più
"robusto" rispetto a Neo4j. Come accennato in precedenza, sono stati molteplici i casi
in cui, a causa di errori nella fase di caricamento dei dati o della creazione delle
relazioni, il database di Neo4j si è "corrotto" al punto tale da non consentire alcuna
interazione, giungendo in uno stato irrecuperabile. Nel caso di Oracle invece non si
sono verificati risultati paragonabili.

23

Potrebbero piacerti anche