orientdb meetup roma 2014
Post on 10-May-2015
232 Views
Preview:
TRANSCRIPT
Story from the Trenches using OrientDB as main database
Luigi Dell’AquilaOrientDB CommitterResponsabile della OrientDB AcademyTwitter: @ldellaquila
Cosa vi racconto?
• Progetti reali, non PoC, non “teoria”• No Logo (NDA, sorry…)• Alcuni buoni motivi per scegliere (o meno)
OrientDB• Il bello dello Schema(less)• BigData == tanti calcoli• Mixare i layer applicativi• Quando la logica la scrive il Cliente
The Big Picture
Il modello dei dati:• Poche tipologie di dato (~10 entita’)• Time series• ~20.000 record BASE (input) per singolo
periodo• Ogni record ha in media 1.500 attributi su
>50.000 possibili• Da questi discendono le altre entita’, che
sono riaggregazioni dei dati secondo logiche CUSTOM
The Big Picture
Il processo:• Caricamento dati di N periodi• Definizione funzioni di riaggregazione– Matematiche– Logiche– Lookup– …
• Riaggregazione dei dati in base a tali funzioni• Reportistica dinamica su singolo periodo o su
time series
The Big Picture
I vincoli:• Flessibile– Cambia lo schema– Cambiano le formule
• Veloce– Riaggregazione singolo periodo in minuti– Report in real time
Perchè OrientDB?
Perchè OrientDB?
Perché è figo ;-)
Perchè OrientDB?
Il modello dei dati
• Ho record con 1.500 attributi (variabili)!!!• RDBMS? Una tabella “normale” non regge:
tabella chiave-valore• Key/Value store? La località dei dati…• Document – Schemaless!• (Column based? Forse…)
Perchè OrientDB?
Il modello di elaborazione: le formule di riaggregazione le scrive il Cliente!• Prima idea: DSL, ma…
– Doppio lavoro per me– Doppio lavoro per il cliente
• Javascript!– Non devo “inventare” un linguaggio– Orient lo esegue nativamente– Lo posso eseguire
• Sull’application layer• Nel DB
– Il cliente trova tutta la documentazione che vuole - casualmente (?) già lo conosce
Architettura (v. 1)
Applicazione
Storage
UI Reporting
Dominio (schemaless + metadati)
FrameworkCalcolo
Factories, repositories,Logica di front-end,
profilatura …
Funzioni JS
Schema dei dati (metadati)
Remote
Import
Prima sfida: Import
L’import dei dati• 1 periodo: 500 MB• In Remote ci mette TROPPO!
File500MB
Import
Esiste?
No
Insert into…
File System Application Storage
Soluzione 1
Scrivo una piccola libreria che fa l’import storage level• Lavoro in Embedded Mode• direttamente sui Documetn• Rinuncio alla logica applicativa “di contorno”• Tempi 1:5
ImportImport
Application Storage
File500MB
nomeFile
Soluzione 1
Applicazione
Storage
UI Reporting
Dominio (schemaless + metadati)
FrameworkCalcolo
Factories, repositories,Logica di front-end,
profilatura …
Funzioni JS
Schema dei dati (metadati)
Remote
Import
½ Import
Seconda sfida: JS
L’utente si deve scrivere le funzioni!• Facile! • Creo una piccola libreria js per astrarre un
po’ di concetti di dominio• Sviluppo una maschera (simile a Studio) in
cui il cliente scrive il codice (CodeMirror) e lo TESTA!
Seconda sfida: JS
Seconda sfida: JS
Naturalmente lo stesso codice viene riutilizzato 1:1 per il calcolo!
Terza sfida: Calcolo
L’import dei dati• In Remote ci mette TROPPO!• Mi scrivo un ½ calcolo sullo storage?
Calcolo
Select…
Data
Update…
User Application Storage
Terza sfida: Calcolo
NO! BASTA!!!Troviamo una soluzione
definitiva
Soluzione
Applicazione
Storage
UI Reporting
Dominio (schemaless + metadati)
FrameworkCalcolo
Factories, repositories,Logica di front-end,
profilatura …
Funzioni JS
Schema dei dati (metadati)
Remote
Import
½ Import
Soluzione
Applicazione
Storage
UI Reporting
Dominio (schemaless + metadati)
FrameworkCalcolo
Factories, repositories,Logica di front-end,
profilatura …
Funzioni JS
Schema dei dati (metadati)
Remote
Import
Dominio (schemaless + metadati)
FrameworkCalcolo
Factories, repositories,Logica di front-end, profilatura …
Import
Funzioni di controllo
importacalcola
Terza sfida: Calcolo
• Deploy di un subset dell’applicazione nello storage
• Questo layer lavorerà in Embedded Mode• VELOCE!• Riutilizzo TUTTO il lavoro fatto (factories,
repositories, application logic, controlli vari)• Posso scegliere a RUN TIME dove eseguire ogni
singola operazione• Devo creare uno strato di funzioni di controllo
per lanciare le funzionalità server-side e ottenere i risultati (functions, ma volendo WS, RPC ecc.)
Terza sfida: Calcolo
orientdb-server-config.xml
Terza sfida: Calcolo
Terza sfida: Calcolo
• Lato Application:
db.query(“select laMiaFunzione(‘a’, ‘b’)”);
Blocking…
Conclusioni
OrientDB Academy
Corsi e Certificazioni
http://www.orientechnologies.com/training
Sconto del 30% per i partecipanti al Meetup sul corso OrientDB Master Developer di giugno
Codice OrientDBSuperDiscount30
top related