Press "Enter" to skip to content

GOTO 2012 • Runaway Complexity in Big Data Systems…and a Plan to Stop it • Nathan Marz


Ciao a tutti, il mio nome è Nathan Mars I
otterrà Twitter Sono stato coinvolto in
i dati e lo spazio big data per oltre 4
anni ormai ho imparato un sacco di lezioni
in quel tempo e oggi parlerò
su ciò in cui credo di essere un grande
problema che abbiamo nel settore giusto
ora che è che c’è un sacco di
la complessità e i sistemi sono le persone
costruisci e quella complessità no
c’è bisogno di esistere e questa è la complessità
prendere un vero e proprio pedaggio nel rendere i sistemi
difficile da evolvere duro per rendere robusto e
altri problemi quindi questo discorso è
strutturato in due parti, quindi prima io sono
parlerò di alcune fonti comuni
di complessità che vedi in bella
molto ogni sistema di dati e poi lo farò
parlare di che cosa è un modo diverso di
progettare sistemi di dati che non hanno
questi problemi quindi prima di arrivare a quello
dovremmo in realtà solo definire ciò che è
è che stiamo parlando di ciò che è il
sistema di dati, quali sono queste cose le persone
stanno cercando di costruire un buon posto per
L’inizio è che un sistema di dati è un sistema
che gestisce l’archiviazione e l’interrogazione di
dati giusti, non credo che qualcuno lo farà
Davvero discuto con ciò che non è così
raccontare davvero tutta la storia
perché il sistema dati ha una vita
misurato in anni giusti dura un lungo
tempo come Twitter è stato intorno per sei
anni ed è stato un dato continuo
sistema in sei anni ma ovviamente oltre
quei sei anni ce ne sono stati molti
diverse versioni dell’applicazione
abbiamo implementato nuove funzionalità che abbiamo
ha portato via le funzionalità che abbiamo raccolto nuove
tipi di dati che abbiamo avuto modifiche dello schema
questo è tutto parte di ciò che accade come
stai gestendo un sistema di dati giusto e
ovviamente come parte di quei sei anni
abbiamo avuto molti errori hardware
abbiamo avuto un sacco di macchine
fallire le cose si esauriscono i dischi di memoria non riescono
e il sistema di dati ha bisogno di tenere solo
passando attraverso quei guasti hardware
e allo stesso modo c’è stato molto umano
gli errori umani sono inevitabili
nello sviluppo del software e nel tuo sistema
ha bisogno di continuare ad andare oltre quelle umane
errori in modo ho intenzione di parlare di
tre fonti molto comuni di complessità
che credo sia quasi universale
e tu non senti davvero le persone parlare
su questa roba davvero a tutti
ma considero queste cose proprio come
importante come una roba che le persone parlano
di persone giuste parlano sempre
scalabilità e il
ci sono e tutte queste altre cose e
quelle cose sono molto importanti ma io
prendere in considerazione queste cose di essere altrettanto
importante e il fatto che le persone non lo facciano
parlare di queste cose mi indica
che come industria abbiamo appena accettato
e interiorizzato queste complessità
la gente non si rende nemmeno conto di quello che è
essere influenzato da queste cose e lo è
colpendo quasi tutti così il primo
uno di cui voglio parlare è colpa umana
la tolleranza e quindi non abbiamo capito come
per sviluppare un software perfetto ma proprio dentro
la durata dei bug del sistema di dati
sarà schierato per la produzione questo è un
fatto giusto e le persone faranno
errori operativi umani non lo sono
perfetto questo è solo quello che succede ora
alza la mano se ti piace costruire
sistemi in cui sai che ci sarà
un difetto è colpa propria e tu no
piano per affrontarlo oh vieni sul
cosa è questo è ciò che fanno tutti
Giusto tu sai che un errore è fatto e
ti stringi nelle spalle e dici
si spera che i registri abbiano abbastanza
informazioni quindi possiamo capire cosa
andato storto e correggerlo ma fare affidamento su
la fortuna per me non è ingegneria del suono
Pratica penso che l’unico modo per davvero
trattare con questo è considerare gli umani come
parte del tuo sistema generale proprio come
i tuoi dischi rigidi le tue CPU la tua memoria
e il tuo software e dovresti progettare
per errore umano
proprio come hai progettato per un altro
colpa ora ci sono un sacco di errori
gli umani possono fare e in effetti lo scopo di
problemi che un errore umano può causare
sono molto più grandi della portata di
guasti hardware come alcuni
esempi di errori umani sono questi
quelli che ti ho creato
distribuire un bug alla produzione che inizia
contatori incrementali nel tuo database
da due invece che da uno e forse da te
non ti rendi conto per tre settimane
fino a quando un cliente viene da te e dice
hey, questo non sembra così bello
forse ti elimina accidentalmente i dati
da un database alzare la mano se
hai mai cancellato i dati da un database
prima accidentalmente va bene vedere quasi
tutti ricordo il mio primo anno
lavorando come sviluppatore di software ho avuto un
collega che stava raccogliendo questo
set di dati per settimane stava strisciando il
web e raccolta dati e solo in attesa
per ottenere abbastanza dati in modo che potesse
analizzalo e solo tu sai fare un po ‘
roba interessante con esso e poi io
come un
sono appena entrato e ho appena cestinato il tutto
cosa era tutto andato ho sprecato settimane di
lavoro da questo ragazzo e questo è il mio primo
anno come sviluppatore di software e ho sentito
davvero brutto e sai che lo ero
scusandomi profusamente e tu sai di nuovo
è il mio primo anno che volevo dire che lo sono
sto per essere licenziato per questo
come ho fatto un errore molto grande e io
ricorda che tutti erano davvero empatici
Ricordo che una persona mi ha detto
congratulazioni ora sei professionale
sviluppatore di software, ma questo è un dato di fatto
questo è ciò che facciamo e questi
gli errori saranno fatti e tu dovrai
avere un piano per affrontarli e di
Naturalmente ci sono molti altri tipi di
errori che possono essere fatti ora vorrei
asserire che la cosa peggiore che può
succede come conseguenza di un umano umano
l’errore è la perdita di dati o la corruzione dei dati
perché questa cosa è quella che dura fino a quando
il tuo errore non perde o è corrotto
roba che avevi prima , almeno puoi
correggere ciò che è andato storto in questo momento nel in
l’intervallo dell’errore che sai che è
nell’aria cosa può succedere se non a
per lo meno non hai distrutto quello che tu
in precedenza era davvero importante
e questo mi porta al tema della
mutabilità quindi le operazioni standard
e le basi di dati sono conosciute come crud create
leggere l’aggiornamento elimina e la mutabilità si riferisce
a U e D e crud ora cosa fai
costruire un sistema basato sullo stato mutabile
il modo in cui modellisti il ​​mondo sei tu
mantenere lo stato che rappresenta la corrente
stato del mondo e il tuo sistema giusto
aggiorna qualsiasi cosa tu credi di essere il
questo è lo stato attuale del mondo
praticamente pratica standard e come
le persone costruiscono sistemi ora sistemi mutabili
intrinsecamente privo di tolleranza ai guasti umani
il tuo sistema sta aggiornando i dati sanguinanti
tutto il tempo che significa qualsiasi errore tu
make può anche aggiornare o cancellare dati e
quello che può essere arbitrariamente cattivo
potrebbe aggiornare ed eliminare molti dati
il che significa che è molto facile da corrompere o
perdere i dati e non hai colpa umana
tolleranza che mi piace nei sistemi mutabili a
essere simile a se tu avessi un ragazzo venire
Verso casa tua e versa benzina tutto
sopra la tua casa e poi copre solo il
tutto in benzina e si tratta di
tu e lui dice che non ti preoccupare
Ho controllato tutti i fili che sono tutti
isolato non ci saranno scintille
non succederà niente
ma sai che qualcosa andrà storto
non copri la tua casa e la benzina
giusto e allo stesso modo non dovresti coprire
i tuoi dati in benzina e dovresti
rendere i vostri dati a prova di fuoco non facendo
è mutabile ora c’è un modo diverso
di costruire sistemi e questo sta basando la tua
sistemi di immutabilità ora in un
sistema immutabile invece di catturare
lo stato attuale del mondo tu
catturare una serie di eventi sulla storia
e ogni evento che catturi accade
in un momento particolare ed è sempre
vero va bene così non si elimina mai o
aggiorna i dati che aggiungi sempre
i dati in modo diamo un’occhiata diamo un’occhiata a un
esempio della differenza tra
mutabilità e immutabilità, quindi diciamo
stai memorizzando le posizioni su tutte le persone
giusto quindi diciamo che inizi con a
database che contiene persone e
location così sally vive a Philadelphia
e Bob vive a Chicago
tutto bene ora diciamo che Sally si trasferisce a
New York quindi quello che farai è che lo farai
aggiorna il tuo database per dire Sally ora
vive a New York, questo è carino
standard ora sarà un sistema immutabile
diritto diverso invece di dire dove
qualcuno vive ora tu dici solo dove
qualcuno viveva come in un certo momento così
tu dici che Sally visse a Philadelphia come
di quel tempo Bob viveva a Chicago al
quella volta e quando Sally si trasferì a New
York ora vive in questa nuova posizione
a partire da questo nuovo tempo giusto e questo fa
percepire il fatto che Sally si trasferì a New
York non cambia il fatto che lei
vivevano a Philadelphia entrambi
quelle cose possono essere vere allo stesso modo
tempo ora basando un sistema sull’immutabilità
limita enormemente la gamma di errori
ciò può causare perdita di dati o dati
corruzione quando non lo sei
aggiornare e cancellare i dati che puoi fare
cose come impostare le autorizzazioni in modo che sia
impossibile aggiornare o cancellare i dati
che lo rende molto più difficile per un casuale
errore di causare una grave quantità di
danno tutto bene che significa immutabile
i sistemi sono molto più umani
pensiamo che tollerante di sistemi mutabili
riguardo l’immutabilità è quella mentre è umana
la tolleranza ai guasti è un grande vantaggio di ciò
ha molti altri benefici, giusto
l’immutabilità è fondamentalmente più semplice
piuttosto che mutabilità invece di avere
sostenere le operazioni che devono
lavorare bene insieme
CR u D devi solo supportare C n R
giusto è fondamentalmente più semplice
sono due operazioni che devono funzionare
insieme invece di quattro e quello è
sull’immutabilità
è che in realtà è molto facile
implementa i tuoi dati immutabili così quando
si guarda un sistema mutabile un mutabile
sistema implica che tutti i tuoi dati hanno bisogno
essere indicizzato in modo da poter trovare il
unità di dati individuali di cui hai bisogno quando tu
è necessario aggiornarlo o cancellarlo ora in un
sistema immutabile quando devi solo
aggiungi dati che non è necessario indicizzare tutti
dei tuoi dati e torneremo su questo
più tardi per vedere come funziona, ma fondamentalmente
implementando il tuo archivio dati immutabile
è facile come avere una directory in a
file system distribuito in cui ogni file
contiene un elenco di record di dati e
ogni volta che vuoi aggiungere dati solo
aggiungere un nuovo file in questa directory è
molto molto facile da costruire l’immutabile
parte del tuo sistema e torneremo
a questo ma devo dare un grido
per arricchire Hickey ricco Hickey è l’autore
di Clojure è stato un grande sostenitore di
immutabilità e penso che nessuno abbia
davvero articolato meglio i benefici
di immutabilità, quindi se vuoi trovare
di più mi raccomando guardando il suo
parla ok così la prossima fonte di
la complessità di cui voglio parlare è la
conflation di dati e query e uno
l’istanza di questo problema è il
normalizzazione contro normalizzazione D
problema quindi se stai lavorando con a
database relazionale diciamo che lo sei
lavorando con un database relazionale e
stai tenendo traccia delle posizioni su
persone così in un modo in cui potresti progettare il tuo
schemi come questo dove per ogni persona
hai identificatori che rappresentano cosa
posizione in cui vivono e poi hai
un’altra tabella che contiene di più
informazioni su quella posizione come il
città stato nella popolazione ora diciamo
è una domanda molto comune che stai facendo
ottenere la città e lo stato per una persona
bene quello che si potrebbe trovare nel corso del tempo che
diventa troppo costoso per farlo partecipare
tra i due tavoli, quindi quello che fai è
pratica standard e durante l’utilizzo
database relazionali come normalizzi
il tuo schema in modo da rimuovere il join da
duplicazione dei dati nella tua persona
tavolo così invece di memorizzare solo il
posizioni una volta nella tabella delle posizioni
copi la città e lo stato nel
tabella delle persone, quindi la tabella delle persone
ora contiene il nome dell’ID posizione
e io sono la città e lo stato e questo
ti impedisce di dover partecipare
che rende queste query molto più veloci
ora ovviamente preferisci che i dati siano
completamente normalizzato
denormalizzare ha un sacco di problemi ora
dipende da te come applicazione
sviluppatore per assicurarsi che le cose diventino
rimanere coerenti ma come sappiamo il
la durata di un sistema di dati è molto lunga
ed è abbastanza irragionevole supporre
che sarai in grado di mantenerlo
proprietà molto complessa in quegli anni
e che tu o qualcuno in futuro
non farò un errore così inevitabilmente che cosa
succede in sistemi come questo roba
diventa incoerente e tu hai no
idea perché e poi quello che fai sei tu
inizia ad aggiungere codice per gestire questi
casi o scrivi questi script unici
per risolvere le incongruenze questo è tutto
estremamente complesso e difficile da trattare
con chiaramente vuoi memorizzare i dati uno
tempo che vuoi che i dati siano completamente
normalizzato ma devi denormalizzare
per le prestazioni non c’è modo di aggirare
questo quando si usa qualcosa come a
database relazionale e il motivo per cui
dover denormalizzare è perché la strada
si memorizzano i dati del modello e della query
completti insieme sono tutti
fondamentalmente intrecciati ora nel
seconda parte di questo discorso torneremo
a come si costruiscono sistemi di dati in cui
caso questi in cui queste cose sono
dissociato e può ottimizzare questo
pezzi in modo indipendente questo è davvero
importante va bene così l’ultimo bit di
la complessità di cui voglio parlare è
schemi così non penso che gli schemi abbiano
mai fatto veramente bene ed è un
cosa incredibilmente importante se guardi
nel settore in questo momento tipo di schemi
di avere una brutta cattiva reputazione, giusto
le persone considerano gli schemi difficili
cambiano, si intromettono e aggiungono
il sovraccarico di sviluppo ti rende la vita
difficile come sviluppatore e forse loro
hanno fastidiose persone di configurazione
considera gli schemi come un rompicoglioni
e quindi una grande tendenza nel settore
recentemente è stato utilizzato l’ elenco degli schemi
database e basta memorizzare i dati come
JSON e questa roba in realtà dimostrazioni
davvero bene se fai una demo di cinque minuti
con il database degli schemi sei tu
cercando come wow così flessibile ho così facile
non avere a che fare con la dichiarazione dei campi
e tipi e tutte quelle cose che posso solo
entrare nella mia azienda e uscire ma io
considera che questa sia una forte reazione eccessiva
e proteggi la promessa fondamentale
prendere le persone stanno facendo è sono
confondere la scarsa attuazione di
schemi con il valore reale che
gli schemi forniscono che ce ne sono due molto
cose differenti
e penso di capirlo davvero
devi chiedersi bene cosa sia un
schema perché abbiamo schemi qual è il
scopo di uno schema come questo aiuta
noi e uno schema fondamentalmente è molto
semplice è solo una funzione che richiede
in un pezzo di dati e ti dice
se quel dato è valido o no questo
è uno schema di cose incredibilmente utile
ti danno molto ti danno strutturale
integrità ti fanno sapere che loro
ti faccio sapere che quando leggi il tuo
i dati ne avrete certi certi
garanzie di ciò che è in ciò che campi
sono in ciò che tipi hanno ciò che
i valori che hanno e il più importante
la cosa che fa è che impedisce
corruzione e previene quegli errori
e quegli errori casuali da corrompere
il tuo database e questi sono l’assoluto
il peggior tipo di problemi da affrontare
perché sai che riconosci il
corruzione molto tempo dopo
successo proprio mentre stai leggendo il
dati forse lo leggi in una MapReduce
lavoro o lo leggi solo quando fai un
chiamata al database e da quella corruzione
succede così tanto tempo dopo che potrebbe averlo
è successo forse settimane o mesi è
estremamente difficile rintracciare cosa
è successo non hai alcuna comprensione in
le circostanze che hanno causato il
corruzione destra questi sono i tipi di
cose che possono causare settimane di tempo a
capire e risolvere prima di tutto quello che hai
per capire come è andato storto risolvene uno
è andato storto e poi ripulire i dati
impostato per assicurarsi che sia di nuovo pulito ora
quando hai una funzione schema corretta
puoi prevenire questi errori prima
accadono bene e tu ottieni un
eccezione al momento dell’errore
fatto che significa che hai completato
comprensione di ciò che il problema era giusto
e questo risparmia una quantità enorme
di tempo e questa è una lezione che ho imparato io
lo avevo sicuramente imparato
esperienza quindi ora devi guardare
okay, perché il tuo schema è considerato
doloroso e c’è un modo migliore che possiamo
gestirli bene sono gli schemi di una ragione
considerato doloroso è perché potrebbe essere
difficile da cambiare, se mai
ho provato ad aggiungere una colonna a un enorme
tavolo relazionale sai che questo può essere
prenditi molto tempo e sii molto doloroso
e quindi non vuoi davvero fare casino
con uno schema ma con cui devi scherzare
lo schema perché i sistemi si evolvono
tempo dovrai cambiarli
conosci un sacco di volte
sono troppo restrittivi come te
può avere solo come forse non puoi fare
oggetti annidati o campi nidificati anche
anche se vuoi un sacco di volte
gli schemi richiedono questi livelli di traduzione
tipo Oh come l’oggetto relazionale
mapper z– e questo di nuovo lo rende giusto
difficile da gestire con uno schema aggiunge molto
del sovraccarico di sviluppo, ma nota
che nessuna di queste cose è
fondamentalmente collegato a quell’idea a
funzione di unità dati destra questi sono
solo le cose che esistono o solo queste
modi specializzati per realizzare queste funzioni
e penso allo stato attuale dell’arte
per fare schemi è limitato e
confonde le persone sul fatto che anche loro
voglio usare uno schema o meno così penso
gli schemi possono essere fatti molto meglio se io
basta descrivere il mio schema ideale strumento che
vorrebbe avere solo il mio dati
rappresentato utilizzando dati regolari
strutture come mappe simili e Clojure
giusto e se lo strumento schema dovrebbe essere solo
una normale libreria che ti aiuta a costruire
lo schema va bene così puoi dire qui
i campi richiesti e qui il tipo di
quei campi e se voglio posso inserire
logica di convalida personalizzata per dire cose
come le età devono essere tra 0 e 200
o questa transazione bancaria deve essere
non negativo deve avere uno strumento di schema
supporto integrato per evolvere facilmente il
schema nel tempo perché come ho detto
il tuo sistema di dati dura a lungo
cambierà nel tempo uno davvero
cosa fondamentale che devi fare
i dati sono serializzati e deserializzati così
lo strumento schema dovrebbe avere il supporto per
realizzazione veloce e spazio-efficiente e
idealmente anche i tuoi strumenti di schema si incrociano
lingua perché in una grande azienda
le persone tendono ad usare un sacco di lingue I
attualmente uso parsimonia Apache per definire il mio
gli schemi sono familiari a tutti
Parsimonia Apache non poche persone ok
è fondamentalmente un messaggio per trovarne uno proprio
linguaggio per definire gli schemi che ha
tipo di linguaggio di definizione dello schema e
quindi un framework RPC in linguaggio incrociato e
il risparmio è abbastanza buono, penso che potrebbe
sia meglio l’unica cosa che è veramente
manca da qui è l’ abilità il
possibilità di inserire la convalida personalizzata
logica dal miglior strumento che esistono
al momento, ma penso che potrebbe essere migliore
Penso che tu abbia avuto
è stato davvero bello allora non c’è
domanda che vorresti usare schemi
perché non aiuta proprio no
ti metti davvero bene
diventiamo provocatori ora lo asserisco
il database relazionale sarà a
nota a piè di pagina nella storia probabilmente no
succederà domani è probabilmente
succederà tra cinque anni non è così
succederà fra dieci anni ma lo farà
capita un giorno tutto bene e la ragione
succederà non è a causa di
sequel schemi restrittivi o pari
problemi di scalabilità anche se questi sono
tutti i problemi con il database relazionale
ma è a causa di difetti fondamentali in
l’ approccio del database relazionale a
gestione dei dati e di queste cose
non erano difetti quando erano originariamente
progettato in realtà direi che lo erano
caratteristiche ma le cose si sono evolute e
ci sono modi migliori per gestire i dati ora
e questi difetti che relazionali
i database hanno la nostra mutevolezza e il
fusione della memorizzazione dei dati con
come è interrogato entrambi i quali abbiamo
coperto tutto bene e questi sono i
ragioni come il grande il nuovo termine nel
l’industria ora è un nuovo sequel e penso
questo termine è giusto completamente sbagliata
stai solo ricostruendo le cose
hai complessità e stai ricostruendo
la complessità non c’è motivo di fare
che ora il fatto è che siamo una nuova era
avere nuove abilità e dovremmo usare
queste nuove abilità sono le nostre capacità
memorizzare a basso costo enormi quantità di dati
per fare i dati dati nel modo giusto e non
eredita le complessità del complesso di
il passato, a destra, guardi ai sistemi oggi
e come nessun sequel e se lo fai è il
teorema del cappuccio e consistenza finale
come se fosse una specie molto più difficile da affrontare
i dati allora erano in passato e
è una specie di cosa strana , proprio come
i nostri sistemi sono molto più potenti di
erano e sappiamo molto di più
sulla gestione dei dati rispetto a quelli abituali di e
eppure le cose stanno diventando sempre più difficili
complesso e non c’è ragione per questo
per essere il caso le cose dovrebbero effettivamente essere
diventando più facile e più semplice, so molto
di te pensi di pensare così sei tu
pensando bene, dice che il sequel è cattivo
se nessun sequel non è seguito quindi no
sequel deve essere giusto che deve essere quello che
lo consiglierà ma assolutamente no
Penso che nessun database sequel sia
generalmente non è un passo nella giusta
direzione ci sono alcuni aspetti di loro
cioè l’idea dell’uso di
il tuo database è un archivio dati
certo ma cose che sono interessanti
su questi database non sono quelli
che ottiene tutta l’attenzione giusta perché
fondamentalmente c’è ancora basato su
mutabilità e non lo sono
chiave del valore tasto destro generico
il valore non è un modello di dati
è uno schema di indicizzazione giusto ed è
non appoggerò tutto il tuo
applicazioni o anche la maggior parte di loro va bene
quindi, come faresti a costruire dati migliori?
sistema che non ha questi
complessità quindi partiamo da zero
quindi per prima cosa dovremmo rispondere alla domanda
di ciò è che stiamo cercando di fare
con i sistemi di dati cosa facciamo realmente
usa queste cose per poter iniziare
fuori dicendo che un sistema di dati è
da qualche parte che metti i dati e poi
recuperare ciò che hai memorizzato proprio questo
sembra essere abbastanza standard su come
le persone effettivamente pensano a cosa
database fanno questo non è davvero come
le persone usano i sistemi dati giusto e questo
è molto facile da vedere quando si guarda a
alcuni esempi , per esempio, diciamo
che stai memorizzando i dati della posizione
informazioni sulle persone quindi alcuni dei
domande che potresti chiedere che i dati siano
quante persone vivono in un particolare
posizione così qui non sei davvero
recuperando ciò che hai immagazzinato giusto tu sia
stai facendo questa trasformazione e
aggregazione dei dati che hai
giusto è diverso non sei solo
ottenere quello che hai qui sei
trasformandolo si potrebbe dire dove lo fa
Sally và bene così questa domanda è
più okay stai recuperando
qualcosa che hai memorizzato o potresti
chiedi quali sono le località più popolose
ancora una volta questa è una tua aggregazione
dati un altro esempio è che potresti essere
memorizzare le informazioni sulla visualizzazione di pagina, forse
stai facendo come un Google Analytics
come prodotto quindi potresti chiederlo quanti
le visualizzazioni di pagina erano lì il 2 settembre
di nuovo non stai davvero recuperando
quello che hai memorizzato lo stai facendo
l’aggregazione si potrebbe chiedere quanti
i visitatori unici sono stati finiti
tempo giusto così qui stai facendo
aggregazione completamente diversa finita
gli stessi dati forse stai memorizzando trans
transazioni per conti bancari così tu
potrebbe chiedere quanti soldi ha George
hai di nuovo questa è un’aggregazione che sei
guardando la sua cronologia delle transazioni e
combinandoli per ottenere un numero che
indica il suo equilibrio o potresti chiederlo
quanti soldi fanno le persone trascorrono su
abitazioni così ora si sta guardando ogni
uno e di nuovo lo stai facendo
trasformazione intera nazione
quindi direi che quello è il modo di
descrivere veramente cosa fa un sistema di dati
è il calcolo di query che sono
funzioni che contengono tutti i tuoi dati
come input l’intero set di dati, non importa
quanto è grande
in questo momento a volte la tua funzione sarà
recupera ciò che hai memorizzato ma spesso
farà aggregazioni di trasformazioni
non stai solo recuperando ciò che
memorizzarlo in modo da definire un sistema di dati come
qualcosa che implementa pure funzioni
che contiene tutti i tuoi dati come input
la formulazione più generale di un dato
sistema chiaramente se si potesse scrivere a
funzione su tutti i tuoi dati che puoi fare
tutto bene ogni singolo sistema di dati
è incapsulato da quell’idea di
funzioni che contengono tutti i tuoi dati
come impostato come input okay , diamo un’occhiata a
ad esempio per vedere cosa sto parlando in modo
diciamo che stai memorizzando le pagine visualizzate
e non saresti in grado di fare una query
che calcola il numero totale di
visualizzazioni di pagina a un URL in un intervallo di tempo
quindi se dovessi scrivere questo come a
funzione di tutti i tuoi dati sarebbe a
funzione che prende in tutti i vostri dati e
inserisci un URL come ora di inizio e ora di fine
e tu faresti scorrere tutto il tuo
dati e ogni volta che vedi un pezzo di
dati per quell’URL e con un timestamp
tra quelle due volte
non hai fatto il contatore cromatico e poi
restituisci il bancone vero e proprio
semplice da implementare la funzione di tutti i dati
ma ovviamente ci sarà troppo lento
giusto non puoi eseguire quella funzione in
in tempo reale tutti i dati potrebbero essere petabyte
scala che la funzione non è gonna run in
millisecondi , probabilmente ci vorranno almeno
ore per andare bene, ma questo è un
buon punto di partenza perché chiaramente questo
questo è completamente generale, quindi come può
facciamo le cose in modo leggermente diverso in modo
che possiamo supportare query in tempo reale
giusto in modo che possiamo fare funzioni di tutti i dati
in tempo reale ed è piuttosto semplice cosa
noi facciamo invece di fare semplicemente
calcoli al volo su tutti i dati
subito inserisci un pre-calcolo
passo giusto non dovrebbe essere sorprendente
questo è ciò che le persone stanno già facendo
ma può essere presentato in un po ‘di
un modo più formale così per esempio per
questa query invece di eseguire le funzioni
su tutte le tue visualizzazioni di pagina
potresti pre calcolare una vista che
contiene una mappatura da URL e ore
al numero di visualizzazioni di pagina per quell’URL
per questo diritto ora e quella vista avrebbe
essere indicizzato dall’URL un’ora ora, quindi se
fai una domanda
conoscere il numero di visualizzazioni di pagina per
blog slash di foo.com tra le ore 3 e 6
si recuperano le voci per ore 3 4 5
E 6 li aggiungi al volo e
sarebbe originale, quindi se guardi
un’architettura come questa ce ne sono due
pezzi ad esso proprio c’è una funzione
ce ne sono due solo è definito come due
funziona una funzione che va da
tutti i dati alla tua vista pre calcolata e
un’altra funzione che risolve il tuo
query basate sulla vista pre calcolata
quindi ci sono solo due problemi che devi
risolvere per costruire un sistema di dati giusto come
implementate la funzione di visualizzazione e
come si implementa la funzione di query
quindi iniziamo con le viste quindi una vista
è una funzione che prende tutti i tuoi dati
come input e quindi produce questo pre
vista calcolata, questo è immediatamente
elaborazione batch dello schermo proprio questo
urlare Map Reduce così guardiamo Mappa
Riduci quando hai chiesto cosa riduce una mappa
di solito diranno qualcosa come oh
è questa cosa in cui puoi definire a
mapper al riduttore e la mappa verrà eseguita
su di esso e i dati verranno partizionati
in base alla chiave e quindi eseguirai a
riduttore a destra che descrive come
Map Reduce works in realtà non descrive
Cos’è
bene, la mappa si riduce veramente è a
quadro per il calcolo arbitrario
funzioni e dati arbitrari perché il
Il paradigma di MapReduce è abbastanza generale per
implementare praticamente qualsiasi funzione
i tuoi dati sono davvero interessanti
perché MapReduce può essere usato per calcolare
quelle viste e MapReduce sai forse
ha un po ‘di stigma di essere
difficile da usare ma in realtà c’è stato un
un sacco di grande lavoro in questo settore e
c’è un sacco di veramente grandi strumenti per
esprimendo quelle funzioni batch e tu
puoi costruire queste visualizzazioni in blocco e solo tu
conosci dieci linee di codice così quando sei
facendo pre-computazione tramite MapReduce
avere tutti i tuoi dati e tutti i tuoi dati
sarà semplicemente memorizzato in un file distribuito
file system e tu li esegui
MapReduce i flussi di lavoro che vengono eseguiti su tutti
i dati e produrre il batch ti visualizza
è necessario risolvere le query in modo che
MapReduce è perfetto per la definizione e
eseguendo quelle funzioni su tutto il tuo
dati e produzione delle viste batch
ma poi il secondo pezzo di questo
l’equazione è quella che devono essere le visualizzazioni batch
indicizzati in modo che possano essere interrogati ora questi
i database sono davvero interessanti
tutte queste cose mostrano i database in modo tale
I requisiti sono devono essere
lo scrittore di lotti Wolfram apprende
devono avere letture veloci casuali per
domande ma più interessanti loro
non richiedono scritture casuali e da allora
le scritture casuali causano Pauline al 99,9% di
complessità nei database questi sono
database incredibilmente semplici e così
la semplicità li porta ad essere molto
robusto e molto facile da scalare qualche
esempi di database come questo sono
elephant 2b che ho scritto e poi
Voldemort uno esempio scritto da
LinkedIn è molto bello
proprietà su queste viste batch a destra
sono molto semplici come ho descritto
facili da scalare sono molto facili da realizzare
altamente disponibile giusto perché loro
non hanno alcun Randomize in modo da poter
ottimizzare fortemente queste cose
queste cose possono essere molto più efficienti a
molto più performante di qualsiasi altro in a
database che scrive in modo casuale così bene
questo viene a riportarci ad alcuni dei
roba complessità di cui parlavo in
l’ inizio così questa architettura è
davvero interessante perché quei batch
le viste sono definite come una funzione di tutti
i tuoi dati in modo da guardare sempre a tutti
dati in una volta così non hai davvero
eventuali requisiti su come sono i tuoi dati
strutturato in modo da poter normalizzare il tuo
dati per il contenuto del tuo cuore sei
avrà schemi forti perché il
l’unica cosa che farai con loro è
eseguire le funzioni su tutti loro in modo che il
il lato sinistro può essere completamente normalizzato adesso
il lato destro può essere la vista batch
considerato denormalizzato e ho messo questo
tra virgolette perché non è esattamente
denormalizzazione come quella che hai in a
database relazionale perché quando lo fai
denormalizzazione sei ancora tu sei
ottimizzando la modalità di archiviazione dei dati
puoi ancora recuperare ciò che hai archiviato
in un gruppo di voi che potete fare
trasformazioni non sei sempre
recuperare ciò che hai immagazzinato potresti fare
aggregazioni o cose come quelle che
davvero interessante vederti ancora
entrambe le idee qui avete entrambi
normalizzazione e l’idea di D
normalizzazione nello stesso sistema ma ora
sono indipendenti e dissociati
gli uni dagli altri e sono collegati da
queste funzioni di tutti i tuoi dati sono corretti
e anche questo risolve la complessità
problema della normalizzazione D perché il tuo
le visualizzazioni batch sono appena definite come
funzioni di tutti i tuoi dati proprio loro
non possono davvero essere fuori sincrono
calcola sempre ricalcolato eseguendo
funzioni del nostro
tutti i tuoi dati, giusto è sempre
dipende da qualunque siano i tuoi dati se
c’è sempre un problema è molto facile
vedi qual è il problema perché tu
avere tutto l’input e tu hai tutto il
uscita giusta è tutto ciò che serve
capire cosa è andato storto cosa
il problema andava bene così sembra che lo siamo
fatto bene possiamo usare MapReduce a
calcolare queste viste pre calcolate e
eseguono query in quelle viste e
abbiamo fatto bene, non proprio così, pensiamo
sul calcolo in batch è così
fondamentalmente lento in esecuzione
le funzioni di tutti i tuoi dati verranno prese
ore che significa che i tuoi punti di vista sono
sarà sempre fuori moda, c’è un
cosa molto interessante qui però quale
è che la maggior parte dei dati sarà
assorbito in queste viste batch a destra
99,9 o 9% sono solo le ultime ore
di dati che non sono nel tuo gruppo
guarda bene che non sono pre
calcolata quindi tutto quello che hai lasciato è quello di
compensare quelle ultime poche ore di
dati e quindi ora hai un generico
sistema che può calcolare in tempo reale
funziona su tutto il tuo set di dati così noi
in effetti guardi la tua visualizzazione batch perché
è sempre fuori moda ha il
proprietà di consistenza finale ma sua
consistenza finale senza il
Complessità associate di eventuali
consistenza questa è una forma di eventuale
coerenza che è molto facile da ragionare
perché hai appena definito una funzione
di tutti i dati e solo andando essere fuori
di data da poche ore va bene così l’unico
la cosa è meno sinistra è il pre computing
visualizzazioni per le ultime ore di dati
a destra lo chiamo le visualizzazioni in tempo reale
ed è qui che l’elaborazione del flusso
paradigma è disponibile in tutto bene quindi l’idea
ecco che costruisci una serie di paralleli
viste alle viste batch che rappresentano
il pre-calcolo per gli ultimi pochi
ore di dati tutto bene ora il flusso
il paradigma di elaborazione è diverso da
elaborazione batch con elaborazione batch
esegui le funzioni di tutti i tuoi dati con
elaborazione in streaming si guardano i dati come esso
viene a guardarlo uno alla volta e
aggiorni le tue visualizzazioni in tempo reale come te
va tutto bene, quindi è qui che usi
algoritmi incrementali e cose simili
mutabilità quindi questa porzione può essere davvero
veloce questo è anche il punto in cui nessun sequel
database inseriti nell’immagine solo con
queste viste in tempo reale che rappresentano
le tue ultime ore di dati vanno bene e
allora quando vuoi risolvere
applicazione
guardi sia il tuo batchview e
la tua visione in tempo reale a cui dai un’occhiata
ciò che rappresenta la maggior parte dei tuoi dati e
allora ciò che rappresentiamo i tuoi ultimi pochi
ore di dati e li unisci
insieme e ora ottieni un risultato
va bene così siamo passati da questo diagramma
dove hai pre-confuso tutti i tuoi dati
e tu interroghi le tue viste pre calcolate
una implementazione pratica di questo che
Io chiamo l’ architettura lambda dove tu
avere un nuovo flusso di dati in arrivo
alimenta costantemente tutti i tuoi dati
imposta le viste batch pre-calcolate e tutto
i tuoi dati come flusso di dati arrivano in te
aggiorna le tue visualizzazioni in tempo reale e le tue
le domande su entrambi sono generiche
modo di costruire sistemi di dati in tempo reale a
costruire qualsiasi sistema di dati in tempo reale ora il
le visualizzazioni in tempo reale sono le più complesse
parte del sistema perché qui sei tu
utilizzando i database di scrittura casuale letti casuali
stai facendo algoritmo incrementale questi
le cose sono molto più difficili e scrivere a caso
database come ho detto sono molto di più
complesso ma una bella cosa qui è quella
perché solo la vista in tempo reale
rappresenta alcune ore di dati questo
parte del sistema può essere mantenuta
relativamente piccolo diritto che non è necessario
enormi gruppi di sequel che possono essere
piccolo perché ne hai solo bisogno
rappresentano poche ore di dati, va bene
e l’altra cosa veramente carina
questa architettura è questo se non altro
mai va storto lo strato batch è
sovrascrivere costantemente il tempo reale
strato in modo che le cose si correggeranno automaticamente
tempo giusto quando le persone costruiscono sistemi ora
in pratica non hanno alcun lotto
strato destra praticamente il modo di
costruire i sistemi ora è essenzialmente solo un
strato in tempo reale basato su mutabilità e
algoritmi incrementali proprio no
avere quello strato che supporta il livello
tu che semplifichi il tuo sistema e
rendere più facile ragionare e così io
chiama questa proprietà del lambda
isolamento della complessità architettonica
perché la maggior parte della complessità del tuo
il sistema è isolato in questo transitorio
livello in tempo reale a cui puoi scartare
qualsiasi punto va bene così qualsiasi discorso su grande
i dati dovrebbero menzionare il tappo sono tutti qui
familiarità con la tomba del cappuccio alza la tua
mano se sei sei okay, allora lo farò
riassumilo molto velocemente in modo da cap teorema
è un teorema è comunemente espresso come
ci sono tre proprietà le tre
proprietà di consistenza ci sono
tre proprietà di consistenza
disponibilità e tolleranza delle partizioni e
puoi averne solo due in realtà a
modo terribile di
descrivi il teorema del cappuccio perché tu
non può davvero non davvero fare
senso di non avere tolleranza della partizione così
teorema davvero cap che puoi
ha solo consistenza garantita o
disponibilità garantita che non puoi avere
entrambi nello stesso sistema ora la parola chiave
non v’è garanzia di bene finché
non ci sono partizioni che avrai entrambe
coerenza e disponibilità il reale
la domanda è quale si sacrifica
quando hai partizioni ora hai visto
che il livello batch è alla fine
coerente, è sempre un paio d’ore
non aggiornato ma in un sistema come
l’architettura lambda puoi ancora
fare il trade-off di se vuoi
piena coerenza o piena disponibilità
e questo è deciso da un livello in tempo reale
se il tuo livello in tempo reale sceglie
coerenza le vostre domande saranno
coerente se sceglie la disponibilità
le tue domande saranno alla fine
coerente ora un’altra nota interessante
circa il teorema del cappuccio è quello del tappo
il tipo di teorema di spaventa la gente molto e
uno dei motivi principali per questo è il
idea di costruirne una alla fine
sistema coerente come una specie di a
cosa complessa da pensare a destra
perché quando tu quando usi qualcosa
come Cassandra e lo stai facendo in maniera definitiva
coerenza diventa difficile da aggiornare
il tuo database giusto perché succede
in un sistema alla fine coerente è
che finisci con la situazione in cui
hai questi valori divergenti per il
stessa chiave e poi occasionalmente è necessario
per fare questa cosa chiamata leggere la riparazione
dove tu come sviluppatore dell’applicazione
Devo dire che va bene queste cose divergono
come li unisco di nuovo insieme così sono
coerente ancora una volta questo davvero complesso
davvero facile da sbagliare e se lo fai
è sbagliato e qualcosa come Cassandra
dove si trova il tuo archivio dati principale
questo è un errore permanente che hai ora
corrotto il tuo database ora è ancora
avere a che fare con lo stesso problema in
questa architettura ma la cosa bella è
che se incasini ciò che farai
almeno non corrompi il tuo database
giusto perché lo strato batch lo farà
corretto per eventuali errori che facciamo in
strato in tempo reale di nuovo questo è ciò che questo
accompagna il tema della complessità
isolamento e renderlo più facile da costruire
sistemi robusti su cui puoi ragionare
c’è un’altra proprietà interessante di
questo sistema puoi fare qualcosa con
questo sistema che non puoi davvero fare dentro
un sistema tradizionale che chiamano questo
eventuale precisione ora a volte sei tu
hai una sorta di query che stai facendo
dove è difficile calcolare l’esatto
rispondere per quella query in tempo reale tutto
a destra un esempio di questo è il calcolo a
conteggio unico
su alcuni set, l’ unico modo per farlo
che in tempo reale è mantenere un set
di mantenere tutto ciò che è
impostare e avere sempre disponibile e
quindi aggiungi e rimuovi le cose da quello
impostato per aggiornare il tuo account forse quello
può essere molto costoso perché il set
può diventare arbitrariamente grande, ma possiamo farlo
in un sistema come questo è possibile calcolare
la risposta esatta nel livello batch
che è facile da fare perché sei giusto
funzione in esecuzione sui tuoi dati e tu
può calcolare una risposta approssimativa nel
strato in tempo reale , quindi se contano le tue unità
forse farai qualcosa come usare a
filtro di fioritura per ridurre lo spazio
requisiti e renderlo più facile e più
efficiente per calcolare quella query e io
chiamare questa proprietà eventuale accuratezza
perché abbiamo fatto il trade-off per ottenere
prestazioni nel livello in tempo reale ma
non è un compromesso permanente perché
il tuo livello batch si correggerà automaticamente e
le cose diventeranno completamente accurate finita
tempo giusto e questo ti dà il meglio
entrambi i mondi di entrambe le prestazioni e
precisione a meno che non si massimizzi il valore
esci dai tuoi dati che puoi ottenere
quanto più valore puoi in tempo reale
che potrebbe essere limitato e poi quando
i tuoi dati sono nel tuo sistema da molto tempo
tempo che passa con il livello batch e
quindi puoi estrarre il valore completo
di questi dati e correlarli con altri
pezzi di dati e cose del genere ok
quindi voglio solo dare una panoramica
di dove tutti i diversi strumenti in
lo spazio si inserisce in questa architettura così
Hadoop è il miglior sistema là fuori per
fare il pre computazione del lotto
è una implementazione di
MapReduce ha un file distribuito
sistema in cui è possibile memorizzare tutti i dati
è un ottimo strumento per quella tempesta
buono per fare l’uso in tempo reale che siamo
anche fare una tempesta di elaborazione del flusso
bene per fare le domande così a volte
a volte puoi solo pre
calcolare così tanto e c’è ancora un
molto del calcolo al volo che hai
lasciato come un esempio di questo sei tu
potrebbe essere necessario fare come una ricerca e unire
query che può coinvolgere molto
calcolo così con qualcosa come tempesta
puoi paralizzare quel calcolo per correre
su un cluster e puoi fare cose del genere
ricerca parallela e fusione molto facilmente
strumenti come elephant DB e Voldemort in forma
nella porzione di batchview e penso
c’è ancora molto spazio a disposizione
innovazione e in vista di gruppo nessun sequel
i database si adattano alle visualizzazioni in tempo reale
questo è dove usi strumenti come
Cassandra reagisce
in HBase e penso che lo strumento migliore per
effettivamente gestendo il tuo flusso di dati
strumento chiamato Kafka che è di LinkedIn
è un ottimo sistema per la gestione
flussi di dati e consumarli in a
modo affidabile
okay quindi ci sono alcuni interessanti
proprietà ho intenzione di sottolineare su
l’architettura della terra così perché la tua
l’intero sistema è basato su pure funzioni
dei tuoi dati in qualsiasi momento, se necessario
puoi scartare tutte le tue visualizzazioni batch e
tutte le tue visualizzazioni in tempo reale e ricreare
li da zero in realtà faranno
in realtà ricreare se stessi
automaticamente questo è veramente buono
perché questo ti dà la possibilità di
correggere gli errori che fai essere un
ricompensa giusta quindi c’è solo come
alcuni tipi di errori che puoi fare
giusto il primo tipo di errore è quello
scrivi cattivi dati nel tuo set di dati
giusti scrivi dati corrotti forse tuoi
lo schema non era abbastanza ristretto, quindi cosa?
puoi fare è entrare e tu
rimuovere i dati non validi e quindi si esegue
la tua ricompensa allora le tue opinioni lo faranno
essere corretto e le cose torneranno a
normale va bene un altro errore di movimento
puoi fare è che hai effettivamente un
bug nel codice che produce il tuo
viste e poi di nuovo per risolvere questo voi
aggiusta il bug e ricalcoli il tuo
viste e tutto è tornato alla normalità
e l’unico altro errore che puoi fare
è un errore nella tua funzione di query e
in tal caso tutto ciò che devi fare è
distribuire la versione corretta e quindi
tutto funzionerà normalmente
giusto e come ho detto prima di un sistema
così il livello di archiviazione dei dati è
ottimizzato indipendentemente dalla query
livello di risoluzione giusto, quindi questo risolve
quella personalizzazione della normalizzazione
il problema ti dà il meglio di entrambi
mondi di uno schema completamente normalizzato come
così come le viste che sono completamente
ottimizzato per le tue domande e perché
puoi sempre ricalcolare le cose da
scratch this ti dà anche il
flessibilità per sostituire il tuo bagno
viste x reali , se necessario, quindi forse
hai nuovi requisiti o c’è
esce un nuovo e migliore sistema e
tutto ciò che devi fare è aggiornare il tuo
algoritmi di ricomposizione per andare a
obiettivo diverso che ricalcoli e ora
sei su un set diverso di set di
le visualizzazioni e l’altra probabilmente la maggior parte
cosa importante di un’architettura
come questo è che i sistemi di dati sono
longevo
come abbiamo discusso delle ultime tre
anni che significa che le tue esigenze cambieranno
al di sopra di
e cambieranno in modo molto inaspettato
modi e avere un sistema basato su
funzioni di calcolo su tutti i tuoi dati
significa che supporterà le tue esigenze future
giusto sarà abbastanza potente e
abbastanza flessibile per supportare qualunque cosa tu
bisogno di fare in futuro perché niente
è più generale della funzione di tutti
dati penso che ci sia ancora molto lavoro
per essere fatto in questo spazio penso cose
può andare molto meglio penso a uno dei
le cose più interessanti che accadrà
in futuro è un’astrazione finita
elaborazione in batch e in tempo reale
elaborando una sola astrazione
farà entrambi per te ma ha ancora il
flessibilità per fare cose diverse in
partita in tempo reale quando vuoi
raggiungere cose come l’accuratezza finale
va bene e penso nei prossimi
anni inizieremo a vedere strumenti come questo
e penso ci sia anche molto altro
lavoro da fare in quei lotti
viste in tempo reale così diversi tipi di
Schemi di indicizzazione Penso che penso a Redis
è un sistema davvero interessante che faremo
guarda per quello che può essere raggiunto lì
e perché Redis esporta questi dati
strutture e operazioni sulla struttura dei dati
e questo è essenzialmente esattamente quello che tu
volete per la vostra vista e c’è un sacco di
lavoro da fare e supporto
diversi tipi di strutture di dati per
quelle viste vanno bene se voglio
menziono che sto scrivendo un libro su questo
soggetto il mio libro va a molto di più
ritmo ragionevole di quello che ho fatto in questo discorso
quindi se vuoi saperne di più su questo
roba, assicurati di controllarlo bene
questo è tutto ciò che ho posso prendere qualsiasi
domande la domanda era che vedo a
problema di prestazioni perché come tutti i dati
cresce il tuo gruppo di quelli che erano
corri più piano come riesci a superarli
in un tempo ragionevole ci sono due risposte
a quello così prima di tutto tutto qui
può essere implementato con completamente scalabile
tecnologie corrette Hadoop è completamente
sistema scalabile in modo da poter scalare il tuo
Cluster Hadoop come necessario per i tuoi dati
il secondo punto importante è che io
definito i layer batch in esecuzione
funzione tutti i tuoi dati che è sicuramente
il posto che vuoi iniziare perché tu
è necessario che tu possa ricalcolare
cose quando si commettono errori o quando
hai bisogno di cambiare le cose, ma è
effettivamente possibile agli occhi incrementali
Lo scapolo è giusto così invece di sempre
funzioni in esecuzione su tutti i tuoi dati
guarda solo i nuovi dati che arrivano
dopo l’ultima iterazione e si uniscono
che nelle tue visualizzazioni batch puoi fare
quello e penso
sicuramente qualcosa che dovresti fare se
hai bisogno di quella prestazione ma la chiave
la cosa è che lo hai sempre
passo pre-computazione che puoi cadere
di nuovo quando hai bisogno di un incrementale
è incrementale come in The Bachelor
renderlo molto più efficiente quindi domanda
c’era un commento morale, ma lo era
dicendo che non lo farebbe quando si trattava di dati
ti serve esattamente in tempo reale questo
il sistema è limitato sì, ma è quello che
le visualizzazioni in tempo reale vanno bene così
proprio come il modo in cui le persone hanno costruito i sistemi
ora come ho detto è essenzialmente solo
la porzione in tempo reale basata incrementale
gli algoritmi e lo stato mutabile si annullano
è ancora qui giusto così puoi
fai sempre quella roba che ti serve, ma tu
avere questa patch dopo il backup che
sai come risolvi le cose cambia io
significa per tutti i dati oh in modo che sia giusto
file e distribuire il file system è
non devi indicizzarlo perché
stai solo facendo funzionare le funzioni in questo modo
puoi così come ho distorto l’ industria
tempo più veloce costruisco alcuni strumenti da realizzare
è facile farlo come dati in attesa
è un dato mutabile, quindi faccio il
dati in sospeso e definisco il mio schema
usando parsimonia e basta sì sì
normalizzarlo al contenuto del cuore la via
In realtà modellino i miei dati usando un
schema grafico va bene che non è indice è
appena rappresentato come un grafico così tutto mio
i dati sono rappresentati come proprietà dei nodi
e bordi e trovo che questo sia solo un
modo incredibilmente flessibile per evolvere il
schema nel tempo è molto facile da aggiungere
nuove proprietà e bordi e cose simili
quella
si, sono le stesse idee degli eventi
dicendo Penso che i veterinari così o qualcosa del genere
si, assolutamente
sì sì sì sì è molto simile a
eventi o cose penso che l’approvvigionamento di eventi
quindi idea dietro l’evento che si sta facendo da te
memorizza i tuoi eventi, ma ha ancora
l’idea di buttare le manifestazioni in modo che
puoi ricostruire la tua visione attuale di
il mondo o in questo caso siamo solo
dicendo che non ci interessa nemmeno cosa sia
la visione attuale del mondo è noi distruggiamo
il nostro sfogo è come i miei dati di prima classe
che non cambierò mai, ma è così
ancora è molto molto simile è il
stessa idea e si ottiene lo stesso
benefici è tutto basato sull’immutabilità

Please follow and like us: