Date post: | 25-May-2015 |
Category: |
Technology |
Upload: | matteo-collina |
View: | 2,971 times |
Download: | 2 times |
Problemi con il Database?
http://500px.com/photo/27874937@matteocollina
Costruisci il TUO database con
Level*
Costruisci il TUO database con
Storia*
Not
a D
atab
ase
Storia dei DB• 1960s: Dai nastri ai dischi per raggiungere accesso condiviso e interattività
• Late 1960s: Navigational Databases, links
• Early 1970s: Modello relazionale, content
• Late 1970s: SQL
• Early 1980s: Un database sul mio Desktop
• Late 1980s: Object Oriented Database
• 2000s: velocità e scalabilità, NoSQL
• Early 2010s: non perdiamo una bella astrazione, NewSQLs
La tirannia delle belle astrazioni
Che cos’è un DB?
Uno strumento per interagire con dati strutturati, all’esterno del
core della nostra Applicazione
Core DB features
• Persistenza
• Prestazione
• Semplificazione dell’accesso ai dati complessi
• Small Core, vibrant community
• Extreme modularity
• Reimplement everything in Javascript
Il Node.js dei DB?
• Small Core: LevelUp - http://npm.im/levelup
• TUTTO è un modulo, scaricabile da NPM
• Sperimentazione di molti aspetti sia della teorica che della pratica dei database e dei sistemi distribuiti
• Soluzioni specifiche
LevelDB• Open-source, embedded key/value store di Google
• Chiavi ordinate
• Valori compressi da Snappy
• Operazioni basilari: Get(), Put(), Del()
• Batch() Atomica
• Iterazioni bi-direzionali
LevelDB
LevelUP• Ispirato da LevelDB
• Supportato da un a key/value store per dati arbitrari, ordinati per chiave
• put(), get(), del()
• Scritture atomiche via batch()
• ReadStream: l’ingrediente segreto
• WriteStream: per comodità
• Encoding: UTF-8, HEX, Binary, JSON, Typewise, your encoding.
ReadStream
• La primitiva essenziale per tutte le feature più complesse, ad esempio LevelGraph la usa per realizzare i JOIN.
• E’ la primitiva fondamentale per accedere ai dati ordinati.
• E’ possibile limitare il range tramite start e end
ReadStream
db.createReadStream({ start: 'Bol', end: 'Bol\xff' })
.on('data', function (entry) {
console.log(entry.key)
})
!
// → Bologna
// → Bolzano
Key Structure• L’ordinamento e il recupero delle chiavi richiede un key
design
• Le chiavi sono un descrittore gerarchico del contenuto:
'countries~Ireland' 'countries~Italy' ... 'towns~Italy~Bologna' 'towns~Italy~Bolzano' ... 'streets~Italy~Bologna~Via Indipendenza' 'streets~Italy~Bologna~Via Rizzoli'
BDFL: @rvagg
Level* Committers
RocksDB
• Rilasciato Open Source il 14 Novembre 2013.
• Il 14 Novembre 2013 è già disponibile il “driver” per LevelUp, http://npm.im/rocksdb
• RocksDB è un fork di LevelDB per gestire terabyte di dati
@matteocollina
LevelGraph
LevelGraph
db.join([{ subject: db.v(“a"), predicate: “friend",object: db.v(“x") }, {
subject: db.v(“x"), predicate: “friend", object: db.v(“y") }],
function(err, results) {
// this will print all the 'friend of a friend triples..'
});
- Francesco Fullone - Enrico Zimuel -- Federico Galassi - Matteo Collina -
JavaScriptbest practices
http://www.jsbestpractices.it/
@matteocollina @rvagg