Press "Enter" to skip to content

GOTO 2016 • Understand Your Data • John T Davies


io
Ho intenzione di passare attraverso alcune tecnologie
su cui ho lavorato per l’ultima volta
Più di 23 anni sono alcune idee che è
davvero la storia si ripete io
ha iniziato a programmare negli anni ’70
assemblatore e poi preso in C C ++ nel
Ovviamente ero a scuola negli anni ’80
tempo e in quei giorni avevamo macchine
con molto poca memoria e ogni
un po ‘ di memoria che dovevi usare
devi usarlo molto molto efficientemente
qualcuno ricorda i micros della BBC
Sinclair’s a X 80s 81 s tutti questi tipi
di cose che avevano ridicolmente piccole
uno standard di oggi ridicolmente piccolo
quantità di memoria così hai letteralmente avuto
utilizzare ad esempio lo schermo
buffer avresti doppio buffering e
e se hai bisogno di fare qualche calcolo
useresti spesso i buffer dello schermo per
queste cose e se volevi eseguire un
gioco dove vuoi avere qualcosa da fare
qualche calcolo che dovevi usare
letteralmente tutto così quello che ho fatto è stato
iniziato a lavorare nei servizi finanziari
vai a vedere molti clienti e questi
i clienti stavano mettendo centinaia di
milioni di messaggi e in molti casi
miliardi di messaggi e sono occupati
usando Hadoop e stanno spendendo molto
di soldi per fare questo e spendendo un enorme
quantità di risorse non solo persone ma
anche l’attrezzatura e ho pensato questo
è un po ‘strano perché guardi
La legge di Moore Laura di Moore è giusta
identifica cosa sta succedendo non è il
tipo reale di motivo per cui sta accadendo
ma queste macchine stanno diventando più veloci
e sempre più velocemente stiamo ottenendo di più
e più RAM e stavo pensando ok
data non è in aumento che molto è
aumentando molto ma qualcosa non va
con questo comunque abbiamo iniziato a guardare
a noi abbiamo il modo in cui possiamo migliorare dimostrare
questo in modo così ironico all’inizio di questo
questa settimana è iniziato un po ‘
strano per me perché ho lavorato
presso una società in cui ho fondato
co-fondato con alcuni colleghi in due
migliaia abbiamo venduto
2007 lo abbiamo acquistato nel 2011 e al
l’inizio di questa settimana è lunedì
venduto di nuovo interessante questa compagnia
ora ha la tecnologia che noi
sviluppato sopra così è che hanno comprato
anche altre cose, ma è una specie di
prova a prova nel budino che esso
funziona davvero così lascia che ti dia un
un po ‘di background perché noi
distribuire man mano che diventiamo sempre più grandi
abbiamo bisogno di sempre più computazionali
potere abbiamo bisogno di iniziare ad usare altri cpus
nessuna di queste macchine che compriamo possiamo acquistare
alcune macchine davvero potenti oggi noi
possiamo comprare macchine con 48 cause che possiamo
avere più CPU nella scatola e
ottieni queste cose che funzionerebbero
intere industrie solo pochi a
Dieci anni fa, infatti, ma si arriva al
fase in cui hai bisogno di più potenza della CPU e
per farlo devi distribuire e
condividi il carico e fai quello che hai
attraversare un pezzo di filo spesso
ho bisogno anche di memoria, perché usiamo la memoria
beh, è ​​molto più veloce di un disco
molto economico ma è incredibilmente lento e
la prossima diapositiva che sto per fare
fai notare quanto sia lento così tanto
di questi numeri vorrei che tu provassi e
ricorda questi non non il reale
numeri ma i rapporti tra loro ora
i motivi per cui questo è qualcosa che puoi
basta prendere Internet è abbastanza
ben noto ho letto fatto questo lato
hanno usato un rapporto diverso ora il
rapporto di questi è per tipo di put
per le persone che non lo fanno o non possono
comprendere i picosecondi in nanosecondi
microsecondi ecc. per metterlo dentro
una specie di numeri di vita reale che possiamo
come capire il modo in cui lavoro
fuori era un viaggio di andata e ritorno a San Francisco
New York è di circa sei ore a una via cinque
ore indietro ecc. e su un aereo così
In pratica ho praticamente messo dentro
l’aereo standard la differenza
tra la velocità della luce e un
l’aereo è circa un milione di volte così
questi sono 1 milione di volte più lenti di
questi quindi diamo un’occhiata a questo se siamo
scrivere i dati sul disco dove ci troviamo
il regno millisecondo ci vuole molto
tempo per il disco se è costante
ovviamente costantemente girando ma il
la testa deve cercare nella posizione in cui
i tuoi dati sono estremamente
in termini di tempo ora avrete più
testa più piatti sui dischi ecc
ma ti consuma molto tempo
puoi ovviamente accelerarlo
un po ‘con diversi livelli di
incursione quindi arriviamo a SSD e lo siamo
diventando molto più veloce non c’è fisico
il movimento del disco e siamo giù a
una specie di millisecondo micro seconda volta
quando entriamo nella ram e questo è il
motivo per cui qualcosa che non scrive
out to to SSD o su disco è così tanto
più veloce, quindi possiamo vedere che ce n’è abbastanza
miglioramento qui, ma guarda il
differenza tra la memoria qui e
la cache l3 l2 che è il denaro che è
nella tua CPU ora che il denaro è in realtà
abbastanza grande per la media anche a
laptop per la cache l3 che è quella
condiviso da tutte le cause è circa 16
megabyte 24-32 puoi ingrandirli
l2 cache diventano più piccole questo è
condiviso dal solo ogni core siamo giù
in una specie di 500k ma ce ne sono molti
può arrivare a 500k che è ancora in genere
dieci volte più grande della BBC micro
computer che stavamo usando solo 30
anni fa, quindi c’è molto margine di manovra
questo è il problema che abbiamo con questo
la tecnologia distribuita non è il
serializzazione che è in realtà
mettendolo sul filo è il processo
di toglierlo dal filo è il
processo di decodifica di qualsiasi dato che noi
invia a un computer per il quale inviamo
elaborando se proviene da un altro
computer se viene da un umano
o se si è imbattuto in internet
deve essere compreso dalla CPU
non può essere elaborato correttamente se non lo è
capito dalla CPU altrimenti è
solo un documento o una pila casuale di
byte quindi questo grande problema qui è d
serializzazione lascia che ti mostri
quello che sembra questo è solo un
questo è il post mortem che usa questo
strumento piuttosto intelligente da cui uso molto
J chiarezza di un programma molto semplice
questo sta generando file delimitati da virgola
o linee delimitate da virgole, quindi genera
come puoi vedere cinque milioni di loro qui
li genera li scrive a
memoria o due dischi e
poi li legge indietro così il tempo per
generarli è qui il momento di scrivere
loro sono qui e il resto di questo è
il tempo di rileggerle perché bene
perché il modo in cui sono memorizzati
modo in cui sono capiti di capire se
li serializzi alla memoria in rete
o su disco non è corretto o no
comprensibile dalla CPU così come il
read-back devono essere messi in a
forma che può essere usata o può essere
utile se guardiamo indietro a chi è
programmato in c o c ++ prima che ci sia
molti di voi quindi ricorderete
i giorni di se stai cercando di fare
qualcosa di efficiente ti manda campi
puoi facilmente abituarti a farlo
l’intero punto di java era troppo astratto
noi dalle diverse dimensioni degli interi
i diversi grandi indiani Little
Indiani e ottieni questo linguaggio tutto
un improvviso che è il linguaggio attuale
standardizzato non è l’hardware e
a seconda dell’hardware che lo dipende
quindi dettato la dimensione degli interi
e le cose che avresti ottenuto lo hanno reso molto
difficile avere c e c ++ portatili se
dovevamo prendere tre lettere che vogliamo
memorizzare ABC e trasferirsi nella finanziaria
i mondi dei servizi ABC ovviamente
rappresenta in questo caso non la valuta
ma è gbp / usd EU che vogliamo archiviare
questo o serializzarlo o rileggerlo se
lo stai facendo nella maggior parte di basso livello
lingue hai solo bisogno di quattro byte da fare
questo abbiamo due scelte che possiamo o
bastone lo 0 alla fine questo significa che
questo ABC è finito o potremmo inserire un
numero all’inizio qui che dice
tre personaggi ora se lo sai
sempre tre personaggi perché è suo
valuta che si potrebbe effettivamente dire bene io
riserverò solo tre tre byte e
possiamo renderlo molto più efficiente
abbiamo solo tre byte sapendolo
saranno sempre tre byte e quando i
scrivilo che si adatterà sempre allo stesso modo
spazio quindi se ho avuto tre valute esso
saranno nove morsi piacevoli e facili quando noi
metti questo in Java abbiamo questo molti byte
o bit 48 minimo quindi ogni singolo
la valuta è
che immagazziniamo prende 48 byte ora che possiamo
Kate prende una copia di uno di questi e
fai un riferimento e sarà più piccolo
sarà 16 byte ma ricordandolo
i dati stanno venendo fuori da un pezzo di filo
fuori da un feed o lo abbiamo deserializzato se pari
se ottieni la stessa valuta due volte
ottenere GBP due volte non lo confronta e
dì oh questo è uguale al precedente
uno l’ho appena letto in modo che ciascuno
uno ha 48 byte e questo è ciò che otteniamo
e non è solo con le stringhe con cui è
praticamente tutti gli oggetti java alcuni lo sono
più efficienti alcuni sono meno efficienti
ma ogni singolo oggetto java che tu
leggere e scrivere in queste cose è
potremmo prendere almeno 48 byte
ottimizzarlo potremmo dire okay potremmo
mettiamo solo bisogno di mordere per memorizzare il
anno il mese il giorno che potremmo ottimizzare
si ottiene un po ‘meno e potremmo
probabilmente ridurlo a circa 16 byte
ma 16 byte quando ne abbiamo solo bisogno tre
sembra molto ricordare ora se noi
stavano leggendo questo dal filo il
differenza tra la lettura 16 e 30 s
16 a 32 40 48 è già abbastanza
significativo quindi ne faremo alcuni
miglioramenti comunque se prendi Let’s
prendi un appuntamento e io posso venire
torna alla valuta ma se prendi un
data questa rappresenta non è il vero
roba rappresenta la quantità di bit
avresti bisogno di memorizzare una data in java
se pensi davvero a tutti voi
ovviamente se hai programmato
c c ++ e anche java saprai
epoca data prima del gennaio 2070 e
tutto è contato da lì se noi
prendi quella data ed è molto facile da ottenere
tenere di quella data dividerlo dal
numero di secondi nel giorno che possiamo ottenere
il numero di giorni dal primo di
Gennaio 2070 quel numero è inferiore a
65.000 il che significa che possiamo conservarlo in
solo due byte, il che significa che possiamo archiviare
qualsiasi data tra ora e circa il 2160
qualcosa piuttosto come due byte, quindi abbiamo bisogno
solo due morsi come questo al contrario di
48 byte come questo se quei dati sono ora
memorizzato sulla CPU come due byte che possiamo fare
confronti di data che possiamo dire di ottenere
tutto fantastico
dello stato meno di questa data uguale
a questa data e ora possiamo iniziare a fare
analisi ed è nel formato giusto
immagina ora quando vediamo dipendere questo
invece di serializzare e quando lo facciamo
Serializzazione Java non solo vediamo
si affida a questo serializziamo il nome del
anche la classe così otteniamo java.util.date
e il contenuto di questo così reale
la serializzazione di una data è in realtà
circa 80 byte è abbastanza significativo
più grande di questo se sappiamo che siamo
serializzare una data e vediamo fare affidamento
solo ai morsi quando lo rileggiamo
nel suo essere molto più efficiente
perché possiamo già usarlo è un
è in un formato efficiente della cpu in modo da estendere
questo un po ‘ più lontano prendiamo
questo è qualcosa delimitato da virgola
quello che ho usato nell’esempio che abbiamo
ho avuto le date in modo che potessimo spostarlo
a due morsi da Cell qualcuno dovrebbe voler
indovina quanti byte abbiamo bisogno per questo
dai, non è così presto
mattina un po ‘sì, quindi abbiamo bisogno di un po’
i bit negativi sono inefficienti quindi useremo a
mordere per questi bit che possiamo usare se lo avessimo
molti di loro potremmo usare un sacco di bit
e alla fine faremmo un morso ma si
un po ‘come è tutto ciò che ci serve in genere
useremmo un morso per queste valute ora
abbiamo detto tre personaggi quindi avremmo bisogno
minimo tre caratteri ma se tu
effettivamente guarda la tabella delle valute iso
sebbene siano solo di fatto 163 valute
definito così 163 valute meno di 256
quindi entriamo bisogno di un morso a
memorizzare ogni singola valuta cosa succede se noi
voglio flessibilità cosa se vogliamo mettere
metalli preziosi in là abbiamo x au
per l’oro x PT per il platino ok possiamo aggiungere
qualche altro in là non è quello
molti metalli preziosi che vengono scambiati noi
potrebbe anche aggiungere una sequenza di escape così noi
potrebbe mettere una sequenza di escape quindi se lo è
zero o 255 potremmo dire che il prossimo
tre morsi sono la valuta così abbiamo
un sacco di flessibilità in questo numero
ci sono già gli standard Triple E
abbastanza efficiente quindi non siamo troppo lontani
fuori con questo abbiamo bisogno di alcuni
flessibilità che dobbiamo assicurarci
non arrotondare, quindi probabilmente lo faremo
fino a quattro byte per questi così
con i tassi di cambio che possiamo memorizzare
i tassi di cambio sono solo cinque significativi
cifre quindi abbiamo solo bisogno di un due
parti le cinque significative significative
cifre e il moltiplicatore 10 al
potere di tornare alle valute
i numeri e di nuovo alle date di nuovo
quindi possiamo memorizzare molto di più
in modo efficiente questo entra in questo
formato approssimativamente in media
70 byte per riga utilizza ASCII
naturalmente se sei tu che hai codificato è
è il doppio del formato, ma restiamo incollati
per chiederti il momento in cui questo
entra non è in una cpu leggibile
formattare quindi deve essere analizzato questo
carattere qui i due è il codice ASCII
in realtà il personaggio 32 il prossimo è 3
6 30 34 35 33 ecc. Così quelli devono essere
calcolato x Tanner o / 10 come vengono
in modo che effettivamente prendiamo questo numero
che è in decimale codificato in binario in
fatto sta che non è non è nemmeno
decimale in codice binario specialmente in
ascii e dobbiamo leggerlo in e
questa è la cosa che sta prendendo il
è ora di passare questo file, quindi se lo chiedo
qualcuno a qualcuno di voi o di chiunque altro
in una domanda di intervista per codificare a
classe per questo questo non sarebbe
qualcosa che ti mancherebbe il
intervista per è per i dati che
ci siamo alzati qui che possiamo vedere questo
sembra abbastanza buono possibilmente fallire
in un’intervista se mettono un motore
qui perché è molto rapidamente molto
facile da avvolgere l’ int in alcuni di
la roba delle telecomunicazioni che abbiamo fatto
in realtà avvolgere i polmoni come
bene abbiamo trovato dopo un paio di giorni il
i polmoni si avvolgono perché siamo
la quantità di dati che stiamo ricevendo
milioni al secondo comunque date commerciali
stringhe ma pensa quanti spazi è ora
prendere non solo nella memoria ma pensare a
la serializzazione quindi abbiamo ottenuto ovviamente
otto per questo e il modo in cui Java
lo memorizza che abbiamo quarantotto
quarantotto 48 48 ecc. fino in fondo
quando vediamo che dipende, è pari
peggio e ci arriverò molto presto
quindi possiamo scrivere questa classe che scriviamo
getter e setter e con i getter
e setter
potremmo fare qualcosa di semplice come pars
la linea usiamo una linea divisa, quindi abbiamo solo
Dite che la linea si divide sugli angoli
non sta facendo nulla in particolare
fantasia e noi semplicemente usiamo i getter
e setter in qui per dire set trade
data otteniamo il formato che otteniamo ciascuno di
i campi 1 2 3 4 5 ecc. e tutto
funziona è bello è abbastanza veloce noi
potrebbe passare come hai visto più di 20
milioni di linee molto rapidamente e questo è
classico java il problema è quando noi
inizia a ridimensionare questo e questo è questo
questo è il problema che abbiamo avuto da allora
Java è uscito a metà degli anni ’90
non eravamo globalizzati a metà degli anni ’90
perché anche se internet lo ha fatto
tecnicamente esiste nessuno lo usava noi
non ho visto Internet che arrivava e
invio di messaggi dai database
siamo in un mondo basato su database nel
Gli anni ’90 come Internet arrivano in noi
ora abbiamo un mondo incentrato sui messaggi
ed è normale aspettarsi di ottenere
messaggi provenienti da ogni dove
sul pianeta e tutto ad un tratto il
la scala di cui abbiamo bisogno è appena finita
gonfiato e il nostro semplice java ora
inizia a mostrare problemi di prestazioni così
questo diventa molto verboso chi qui
pensa che XML sia una specie di entrambi
standard per i dati se ne hai abbastanza
di te quello che posso dirti che java è peggio
java è in realtà peggio di XML quindi se
inserisci i tuoi dati da Java in XML
in realtà stai risparmiando spazio credici
o non questo 70 linee come approssimativamente 70 per
linea esce a 328 byte in memoria
questo è molto da leggere in un milione di
questi non sono 70 megabyte di cui ora abbiamo bisogno
328 megabyte questo è mezzo gigabyte
solo per leggere un milione di questi e
questo presuppone che tu non ne abbia
inefficienze nel modo in cui tu hai
hai memorizzato questo così abbiamo già
gonfio circa quattro volte più grande e
anche questo deve essere letto dal disco
o leggere dalla rete che è male a
inizia con ma non ci siamo mai addentrati
la civiltà eppure Java è davvero
gonfiore delle cose mi piace pensarlo
come questo per quelli di voi quel programma
in C C ++
tutto se vuoi elaborare
le verdure sono tutte belle e croccanti
davvero bello e fresco quando ci lavora in
C ++ è piuttosto difficile da ottenere
tutto giusto e il ricordo giusto
e sì tutto questo potrebbe essere schiacciato e
distorto se si abusa la memoria ma
quando lavoriamo in Java lavoriamo molto
mondo più protetto di ognuno di questi
le cose sono state avvolte
con la spazzatura che non abbiamo bisogno di quelli
due byte di cui avevamo effettivamente bisogno
la data sì, ho spogliato le ore
minuti secondi e millisecondi ma noi
potrebbe aggiungere quelli con un altro paio di morsi
questo è anche questo non è nemmeno corretto in
Java ognuno di questi sarebbe
avvolto individualmente all’interno del
contenitore quindi avremmo individualmente
le cose incartate racchiudono due cose
quale sarebbe all’interno di più sacchetti di plastica
ed è quello che otteniamo e cioè
un altro problema quindi abbiamo avuto due problemi
ora uno è che i dati sono inefficienti
e non stiamo usando correttamente così il
La CPU sta facendo gli straordinari sul serio
degli straordinari ma ora dobbiamo anche andare
torna indietro e raccogli tutto quello che schifo
abbiamo lasciato mentre lo elaboriamo così
tutto ciò che rimane attorno a questo
deve essere chiarito non è solo
Java per chiunque pensi che io stia usando
l’ultimo linguaggio meraviglioso che rende
java look silly Sono davvero alla moda, quindi sono
usando una di queste cose in realtà
alcuni di questi sono piuttosto buoni, Kotlin lo è
ottimo ma è lo stesso problema che sei
lavorando in una JVM e se la pensi bene io
significa che dubito di molte persone che lavorano
Microsoft qui con i linguaggi Microsoft
okay, alcuni di voi voglio dire che tu hai lo stesso
problema che stai lavorando all’interno di un virtuale
macchina è la macchina virtuale
ti astraendo dal modo in cui sei
ottenendo gli stessi problemi con questo se
piuttosto stai mettendo le cose in memoria
di usare una mappa o qualcosa che viene
con la lingua probabilmente sei spesso
utilizzando una di queste griglie di dati in memoria
questo direi risolvere ma rende il tuo
vita più facile con la distribuzione dei dati
quindi se stai mettendo i dati in questi tu
può scrivere in gemfire coerenza neo4j
cast nocciola ecc. puoi scriverlo dentro
li distribuirò per te ma cosa
non riesci a vedere
è è tutta la roba che va avanti
sotto e tutta la serializzazione
ora alcuni di questi hanno ottimizzazioni per
questo, ma è ancora molto lavoro
che deve essere fatto così come possiamo
risolviamolo torniamo a guardare
il Java funziona se lo prendessimo
classico e lo stiamo mettendo
codice Java standard che potremmo generare
questo e questo è Java vincolante come quelli
di te che hai usato qualcuno ha usato Jack
essere jib X questo tipo di cose così hai
ho forse un database che hai
ha ottenuto XML e genererà Java
codice per te che è relativamente semplice
e facile da fare, ma quello che sta facendo è
generando questo da questo e noi semplicemente
ha detto che è accettabile è
ok, ma sta iniziando a usare molto
memoria quindi cosa succede se ci limitiamo a memorizzare
la fila bene all’improvviso che abbiamo ora
migliorata la dimensione della memoria da 324
fino a solo 70 byte quindi abbiamo fatto un
enorme miglioramento ma ora ho un
miliardi di queste file sono molto
più piccolo che è bello come faccio a cercare
attraverso di loro se voglio cercare attraverso
questi ora devo tornare indietro e passare
le dannate cose così quando sto leggendo questo
linea voglio dire ottenere tutto ciò che
è al di sopra di una data particolare che ha a
comprare con euro contro dollaro devo
passa ogni riga e ogni riga che io
passato ho quindi passare i dati in
per capirlo potrei costruire un
indice ah ma sto memorizzando oggetti e il
indice quindi fa una farsa completa di
dovendo immagazzinarlo in questo modo è così
molto buono per l’archiviazione ma non è nessuno
utilizzare per effettivamente elaborare i dati così
ho bisogno che la CPU abbia bisogno di capire
cosa c’è lì, così i dati originali lo farebbero
entrare in questo è abbastanza utile per XML
perché devi analizzare tutto
l’XML se prendi un XML standard
contratto come f pml nel settore bancario
mondo è solo circa 25 k
per ogni singolo contratto e potresti
avere centinaia di milioni di questi
cose così consuma molta memoria
ci sono banche qui intorno in città
che hanno decine di terabyte di pollici
archiviazione di memoria e questo è molto è
costoso
che dire di compressione o compattazione
okay, qual’è la differenza, se noi
dovessimo comprimerli abbiamo due modi
come chiunque abbia provato a comprimere un
file ci sono due modi diversi che puoi
fallo o puoi comprimerlo
singoli file e ottieni un
rapporto di compressione relativamente buono ma se
comprimi tutto insieme
un rapporto di compressione molto migliore okay così
ora abbiamo un milione di queste righe se
li comprimiamo è abbastanza buono ma
se vogliamo solo uno di questi dobbiamo
decomprimere l’intero 1 milione di loro
non è così buono e non solo, ma
genera e ha bisogno di molta memoria
per farlo, ora possiamo premere
le singole linee invece sono appese
anche questo richiede molto tempo non solo
ma devo decomprimerlo
prima che riesca a capire il contenuto
di esso in modo da renderlo ancora più lento
abbiamo risparmiato ancora più memoria, ma è così
lo rende ancora più lento se lo compattiamo
torniamo alla data di Java, quindi se noi
compatto, ora abbiamo solo due morsi
e non abbiamo bisogno di decodificare l’intero
messaggio per essere in grado di leggere questi due
morsi abbiamo solo bisogno di sapere dove sono
sono così che dobbiamo fare è calcolare dove
quei due morsi sono ciò di cui abbiamo bisogno
leggerli nella CPU e possiamo
fai subito il confronto quindi spostati
questo in binario se ne immagazziniamo tutti
di queste righe semplicemente come una matrice di byte e
quell’array di byte non è quello ASCII
era in questo, ma il binario che abbiamo
sostituito con questo così abbiamo forse
quattro byte all’inizio per questo per
l’ottavo ma in ciò che vogliamo mantenere
come abbiamo due byte per la data
non c’è tempo lì, quindi è solo
abbiamo bisogno di due byte per averne uno
morso per il buy-sell che abbiamo un morso
per la valuta quindi abbiamo bisogno eccetera come
andiamo attraverso possiamo far scendere questo molto
più piccolo ciao tu dici bene ora dobbiamo
cambia tutto il codice e stai lavorando
in un mondo orientato agli oggetti che abbiamo
incapsulamento quindi se abbiamo scambi commerciali
date e impostare la data di negoziazione che è il
modo tipico che faremmo con la classe
se lo sostituiamo con la data di scambio
e sto solo usando il semplice esempio
qui così
questo sta ottenendo la data dai dati
così andiamo e troviamo questo è giusto
qualcosa che va e trova il
data in questi casi particolari potrebbe essere
complicato se fosse qualcosa di più grande
potrebbe essere semplice se è fisso
formato di lunghezza così in questo caso particolare
sarà alle otto e leggerà
la parola indietro ora non abbiamo parole in
Java quindi leggiamo questo in un lungo
il resto è zeri o qualunque cosa tu
voglio che sia e Java ha questo piuttosto
comoda capacità di prendere effettivamente
lungo il quale è il numero di
millisecondi dal primo gennaio 2070
quello che facciamo è moltiplicare questo numero per 86
milioni e quattrocentomila che è
il numero di millisecondi nel giorno se
lo facciamo che passiamo in un nuovo appuntamento che otteniamo
indietro il giorno originale in modo da poter andare da
due byte per una data full-size perché ora noi
ho appena detto che vogliamo davvero evitare
oggetti perché vogliamo evitare la spazzatura
quindi cosa abbiamo fatto qui mentre noi
abbiamo usato questa parola nuove nuove casse
e altri oggetti così ogni volta
sarebbe chiamata a questo metodo saremo
ottenere un nuovo oggetto sicuramente non è così
bene bene Java il modo in cui il
I lavori di assegnazione sono divisi in JVM
diviso in sezioni separate questi
se sono usati molto velocemente perché
hanno usato il dato che usiamo come
un confronto per esempio non appena è
stato usato il suo spazzatura raccolto proviene da
lo spazio eden così questo è come mi sento
come un buffer ad anello è incredibilmente veloce
abbiamo provato a fare alcune cose intelligenti
con questo utilizzando i campi statici su
questo in modo che possano essere riutilizzati e noi
Sono andato a parlare con i ragazzi di Oracle
e hanno detto che Bob usava solo
ignoralo, usa solo nuovo in realtà
più veloce sarà anche la raccolta dei rifiuti
più veloce che abbiamo fatto e con qualsiasi cosa
era 1.6 Bush sottolineatura sorta di 70
qualcosa piuttosto in avanti ha funzionato
incredibilmente veloce questo è efficacemente lo è
gratis è quasi gratis è arrivata
giù per una sorta di singolo singolo
le istruzioni stesse con la data commerciale noi
prendi la data che otteniamo il tempo che abbiamo diviso
dallo stesso numero
allora usiamo queste cose in C ++
i programmatori ricorderanno molto bene
li usiamo tutto il tempo o C
programmatori questi sono ruotano proprio noi
avere rotazione turno ecc. ora non avrò
sfortunatamente non ho tempo per mostrarti
il codice ma se qualcuno è interessato ho
hai il codice che puoi se hai un
memory stick si può andare via con esso
o dammi una e-mail ti mando a voi
è solo un semplice esempio di come questo
funziona e in questo ne ho due
confronti ho lo stesso pezzo di
codice perché stiamo usando in modo efficace
come un’interfaccia stiamo usando il
getter e setter con cui posso gestirlo
entrambi i classici oggetti java di quanti ne possa eseguire
con oggetti binari che guardano il
risultati e tutto ciò che faccio è eseguirlo come il
demo così guardando i risultati questo è
la quantità di byte utilizzata nel classico
oggetto java questo è ciò che usiamo con il
versione binaria potrei compattarlo
un po ‘oltre perché io
usato un intero morso per il
compra-vendi quando vediamo dipende come ho detto
la serializzazione è il nome del
classe e poi il contenuto della classe
sono coppie di valori tag mentre serializziamo ma
se vediamo dipende un oggetto quello
contiene più altri oggetti che ottieni
nome contenuto e poi dentro di te
ottieni nome nome contenuto nome contenuto
contattare così ogni riga iniziata a
70 morsi ora vediamo realizzato è quasi 700
morde 10 volte più grande è per questo che Java è
lento non solo, ma deve leggerlo
indietro e ancora decodificarlo binario
la versione è 85 ora è aumentata perché
è in realtà il nome della classe che ho usato
qualcosa come demo binario o qualcosa del genere
così ho il binario di John Davis
demo o qualcosa ed è lì che questi
i byte extra sono andati ora possiamo ora
perché in un oggetto Java se lo si desidera
per memorizzare una stringa che non sai dove
la memoria è per la stringa che è il
punto intero dell’incapsulamento
avere un punto o un riferimento per il
stringa è possibile ottenere i dati dal
stringa e puoi effettivamente eliminarlo
e puoi scrivere che sarebbe
serializzazione personalizzata in modo che potessimo
evitatelo , ma abbiamo una matrice di byte
sappiamo esattamente dove si trova il ricordo
perché è un cosa che possiamo sostanzialmente ripetere
attraverso questo array di byte, così ora possiamo
utilizzare la serializzazione personalizzata perché sappiamo
in questo particolare ha una dimensione di 39 byte
caso non in
caso non varia, quindi cerchiamo di arrotondare
fino a un limite di 8 byte e otteniamo
magicamente 40 significa che ora possiamo scrivere
se ne abbiamo un milione di questi possiamo
scrivi una serie di milioni di volte 40
quindi quaranta megabyte 41 milioni di questi
le cose in una volta vanno a vantaggio interessante
ora possiamo cercare qualcuno di quelli e
possiamo leggere quasi i dati
istantaneamente non solo quello, ma quando leggiamo
di nuovo in realtà possiamo, se lo sappiamo
stiamo leggendo in un milione che possiamo leggere
in 1 milione di righe usando Java niño in
uno va direttamente dal disco direttamente
torna in memoria non solo, ma è
immediatamente comprensibile non c’è
fare una pausa per essere fatto ora guarda il
prestazioni ora così prendiamo questo standard
serializzazione 41 microsecondi tipicamente
quindi stiamo ottenendo ciò che 20 250 23 è
torna a 2,5 milioni a due virgola cinque
mille secondi su questo usiamo il
in batch ho scritto un migliaio o
scrivendo un milione di questi come binari
ora siamo giù a 44 nanosecondi quindi
abbiamo quasi mille volte
aumento delle prestazioni e questo è
tipicamente quello che scopriamo da questo
lascia che ti mostri solo dei confronti
questi due grafici io allargherò quello
a destra in un secondo questo è il
uso di heap post-mortem dell’ordinario
Versione oggetto Java questo è 200 secondi
quindi 200 secondi qui questo è otto
gigabyte di heap ne sta creando cinque
milioni scrivendoli fuori e poi
leggendo gli stessi cinque milioni di nuovo in
un secondo array quindi finiamo con dieci
milioni in memoria quindi aumentano
dimensioni così otto gigabyte di heap questo è
un heap da 2 gigabyte e questo è 40
secondi e li ho semplicemente ridimensionati
quindi puoi vederli all’incirca fianco a fianco
quello che sta succedendo qui è esattamente il
come quello che sta succedendo qui il fatto
che la pendenza sembra difficile solo perché
la scala è diversa, è così
parte qui e qui è lo stesso questo è
la rileggere quindi questa è la D
serializzazione
quindi la serializzazione D che stiamo scrivendo
loro fuori la civiltà mi dispiace creare
serializzazione d serializzazione e come te
può vedere solo in questo esempio molto semplice
cinque volte più veloce guarda ora al mucchio
utilizzo quindi questo è il tempo di pausa GC GC
il tempo di pausa è ciò che uccide di più
applicazioni in particolare se lo sei
lavorando e come diciamo in tempo reale o
impostare un tempo reale o qualcosa in cui un GC
pausa interromperà la tua macchina uno dei
i modi migliori per evitare questo è avere come
piccolo ricordo possibile e tu hai
più macchine se hai poco
memoria quindi devi distribuirlo
e sei tornato con gli stessi problemi
di nuovo se ne hai una grande quantità
memoria si ottiene meno pause GC ma quando
loro succedono nel tipo di
secondi e decine di secondi e si chiude
la tua macchina in giù e dato il modo in cui Java
funziona anche se sei single
threaded prenderà ogni singolo core
sulla tua macchina ti ucciderà
macchina Sono sicuro che hai visto
occasionalmente quando va in tilt, è così
abbastanza facile da replicare e
a volte arriva allo stadio in cui si trova
in realtà non cattura il proprio segnale per
lanciare l’eccezione di memoria insufficiente in
In quale caso la tua macchina andrà semplicemente
in un orribile morire e se stai usando
un portatile tutti i fan si accenderanno e
comincerà a diventare piuttosto caldo e lo sono
certo che l’hai visto, quindi guardiamo
a questo di nuovo 200 secondi qui questo è
pause da mezzo secondo a mezzo secondo
questo è 40 secondi ora
il gradino inferiore qui è di 50 millisecondi quindi
Ho 50 100 150 200 ecc. Mezzo secondo
ecco che la cima di questo è 45
millisecondi al massimo di 45 millisecondi
tempo di pausa e un quinto del tempo a
in effetti lo si tratta davvero
esempio davvero semplice questo è qualcosa
che se hai dati che sei
usando la distribuzione e puoi fare molto
piccole modifiche questo è il
una specie di prestazione che puoi vedere quando siamo noi
ha fatto questo per cose più complesse come XML
abbiamo ottenuto aumenti delle prestazioni e il
regni di in questo caso erano cinque noi
entrato nei regni di 50 volte più veloce 50
meno memoria e questo è stato molto molto
significativo
quindi è una serializzazione e
deserializzazione che sta causando il
problemi con questo e questo è lì
ci sono molti molti quadri in
fatto probabilmente 20 30 quadri diversi
perché la civiltà è così lenta
doveva essere compatibile in tutto questo
qualcuno ha lavorato con qualcuno di questi Avro
cryo parsimonia protobuf ecc a tutti questi
sono significativamente migliori rispetto alla JVM
perché la JVM è così pessima così tu
puoi fare praticamente qualsiasi cosa e
hai intenzione di migliorare la tua JVM
puoi scrivere la tua serializzazione
efficacemente è quello che fanno questi ma
anche questi memorizzano le coppie di valori dei tag
memorizzare un token per dire che sto andando
per inviarti una stringa che sto per inviare
sei un appuntamento che ti manderò a
qualcos’altro se stai inviando dati
da A a B tipicamente hai un
il contratto è sapere cosa sto mandando così
perché preoccuparsi di inviare tutti i dettagli
su cosa stai per inviare se tu
invia XML quindi se vai a un punto di riposo
servizio o qualcosa del genere e prendi json o o
XML in genere hai uno schema
definisce cos’è e per questo
è ben definito ciò che è stato inviato ora
se stai inviando dati di serializzazione o
stai immagazzinando dati in un signore civile
formati che in realtà non è necessario memorizzare
il contratto o il contenuto del
messaggio con ogni messaggio perché è
non cambierà le cose che devi conservare
alcuni tag e alcuni gettoni per dire questo
sarà uno di questi o uno di
questi e puoi metterli un po ‘o
un morso ma non hai bisogno di fare il tag
coppie di valori quindi quando confrontiamo questo con
con questi se facciamo solo binari dritti
scrivere è molto significativo
più veloce di così come qualcuno usa
jmh prima di un’altra di queste cose
consiglio vivamente se lo si desidera
andare via con qualcosa di
utile per usare questo è uno strumento straordinario
jmx cerca solo il java micro
cablaggio di riferimento incredibilmente utile
fa delle cose davvero interessanti
crea tutto molto molto velocemente
il lato negativo è che può utilizzare
che odio perché spendo così tanto di
il mio tempo di programmazione sugli aerei e, naturalmente
Maven non funziona sugli aerei perché
non hanno repository nexus su
loro ancora ancora aspettando quel giorno ma
quando metti questo micro punto di riferimento
per esempio, quello che ottieni ne esce
puoi vedere che questo è nano secondi ma su
possiamo vedere 171 nanosecondi per il binario
civiltà e con crio in questo
particolare esempio abbastanza un po ‘
più lentamente è ancora molto significativo
più veloce di Java rispetto a Java standard
benchmarking attraverso tutti questi
diversi un risparmio pro 2 bagni ecc
possiamo vedere che ci siamo fatti abbastanza bene
la performance qui l’altra interessante
cosa è questa è la serializzazione e
la deserializzazione è virtualmente
istantaneo perché è niño questo
era un punto di riferimento open-source che noi
usato così realistico come questo particolare
punto di riferimento era, ma significava che noi
ho letto abbastanza istantaneamente
su questo se stiamo facendo analisi questo è
dove entra la CPU se lo sei
analizzare grandi quantità di dati e
i tuoi dati sono archiviati in oggetti Java
ogni volta che usi quegli oggetti java
e hai una serie di forse a
cento mille un milione perché
stai cercando attraverso un array così
sta dicendo okay del mio oh giusto che voglio
per ottenere tutto ciò che è tra questi
date e tra questa quantità di
valuta o tra queste cose e io
voglio processarlo così ho intenzione di fare a
lambda qui con una MapReduce dove sono
ottenere gli importi in valuta per questo
In pratica sto facendo un MapReduce in tutto il mondo
ogni tipo di valuta creando a
iniziando con un bigdecimal da zero e
Sto ricevendo l’importo e sono fondamentalmente
aggiungendo questo quindi sono fondamentalmente per ciascuno
valuta ottenere me il totale di ciascuno dei
valute se è in oggetti Java è
molto veloce se è in questi binari
oggetti che ora devo fare un po ‘
di calcolo quindi potresti pensare che sia
in realtà un po ‘più lento perché ho
ora ad esempio con le date che ho ora
devo fare questa manipolazione di
moltiplicando per 86 milioni quattrocento
mille per esempio pensi che va bene
dovrebbe essere più lento di ciò che accade realmente
perché ora abbiamo una matrice di a
milioni di questi o di 10.000 o qualsiasi altra cosa
potrebbe essere che la matrice viene letta nel
cache perché è nel denaro che non sono
facendo memoria si recupera così sto andando per il mio
200 e ventisette nanosecondi
tempo dalla memoria sto andando dritto dentro
i soldi ora in Java ne avrò un sacco
nel denaro, ma quando è memorizzato in
binario posso ottenere ancora di più in contanti
e in realtà troviamo che il binario
gli oggetti sono persino più veloci di Java
oggetti che è un po ‘strano perché
stai effettivamente facendo più lavoro ma è così
in realtà più veloce, quindi abbiamo l’abilità
perché l’abbiamo incapsulato anche
anche se è memorizzato in binario, possiamo
fare ancora tutto ciò che potremmo fare
prima che diventiamo molto molto alti
prestazioni e risultati interessanti ma
possiamo farlo molto più velocemente chiunque usi
Hadoop qui forse sì non preoccuparti
qualcuno ha usato scintilla sì un po ‘di più
modo intelligente di farlo uno dei
problemi con la scintilla o Hadoop è così
non appena avrai superato il
capacità della macchina che sei
lavorando su devi distribuirti
hai due scelte che praticamente finisci
della potenza e della memoria della CPU che puoi
o vai su disco così metti tutto
sul disco e utilizzare la cpu esistente
puoi distribuire puoi andare a
più memoria che è più veloce ma colpisci
serializzazione e ma ottieni il
CPU extra il problema quando lo fai
lascia che ti mostri qui questo è
questa è la velocità che ci vuole in standard
scintilla quando siamo sulla stessa macchina ma
non appena abbiamo raggiunto quello che era questo uno
cache memoria sterilizzata o distribuita
memoria abbiamo colpito questa scogliera ogni volta che questo
ti dividi colpire questo enorme
scogliera perché dobbiamo serializzarlo così
le scintille vengono abbastanza standard come uno di
le ottimizzazioni che puoi usare sono cry oh
è una serializzazione ottimizzata
il che significa che mentre usi la scintilla
è più veloce usare la civiltà
posso vedere che c’è un miglioramento ok questi
sono parametri di riferimento quindi non necessariamente
loro come sorta di fatto o figura ciò che io
voluto
ti chiedo di notare davvero anche solo
anche se è solo un punto di riferimento e tutto
punti di riferimento possono mentire c’è un enorme
differenza qui tra questi due
perché ora abbiamo migliorato il
serializzazione perché stiamo leggendo questo
roba direttamente in un formato che il
La CPU può usare usando il binario che possiamo ora
distribuire e non abbiamo questa scogliera
mentre colpiamo il confine della distribuzione
la rete dove fondamentalmente è solo
come un piccolo presunto così pronto solo per
avvolgi questo se riesci a riscriverlo un po ‘
un po ‘del tuo codice ti tiene incapsulato
può ottenere prestazioni incredibilmente veloci
dai tuoi dati non è necessario
distribuisci così tanto perché lo hai
hai più dati nella memoria che avevi
in primo luogo abbastanza significativamente
più è incredibilmente veloce e da no
solo dai parametri di riferimento e dal test
ma dai clienti reali che installiamo
questo con e alcuni alcuni molto grandi
i clienti che lo utilizzano vanno da questo
l’oggetto e ancora questi particolari
i numeri sono solo dei parametri di riferimento
attraverso non so di cosa si trattasse
Questi sono 100.000 messaggi di FP ml
XML complesso ma questi sono occhi binari
gli oggetti java impiegavano 22 millisecondi ma
la versione binaria ne ha solo 17
millisecondi quindi stiamo iniziando a
già vedere alcune delle prestazioni
guadagna da colpire i soldi che abbiamo di più
lavoro da fare e XML era di più
complicato perché devi allenarti
dove sono i dati e perché hai
gli elementi ricorrenti nell’XML sono molto
più complicato perché tu hai
cose che variano di dimensioni e tu sei
scavalcando i dati per scoprire se
i dati sono quelli che vuoi nonostante tutto
quel lavoro extra che doveva essere fatto noi
ha ancora ottenuto un aumento delle prestazioni
oggetti standard e i dati erano a
frazione delle dimensioni trasporto amichevole
l’altro vantaggio quando sei a corto di
memoria basta scriverlo sul disco che hai
ho qualcosa come SSD perché puoi
scrivere su disco e leggerlo di nuovo in
la memoria senza pause è importante
non c’è nessuna civiltà D per te
leggilo direttamente da questo direttamente in
memoria lo usi immediatamente così da scrivere
qualcosa da fare
è solo una specie di cinquanta percento più lento
piuttosto che usarlo in memoria quindi a
macchina tipica con diciamo 16 gigabyte di
ram e un terabyte più di disco che puoi
effettivamente usare quel terabyte quasi come se
era una rampa che è più lenta naturalmente ma
quasi alla stessa prestazione simile
che è assolutamente impossibile
usando oggetti java standard , quindi cosa io
speriamo che questa sia l’ultima diapositiva
Mi piacerebbe che te ne andassi con qui è un
un po ‘di c’è un sacco di cose
puoi fare per migliorare il codice
devi migliorare le prestazioni
apportare piccole modifiche per apportare piccole modifiche
ma questo è qualcosa che ho preso
roba che facevamo noi 20 anni fa
era solo una pratica standard questo è
qualcosa che puoi tornare indietro e che ho
fatto questo con molti clienti iniziali
dove entriamo guardiamo i dati
loro hanno e in mezzo giorno tu
può iniziare a vedere qualcosa di incredibile
le prestazioni aumentano prendendo il
oggetti che hai fatto fare una coppia
di piccole modifiche da mezza giornata
puoi andare a una settimana che puoi dire okay
abbiamo visto alcuni miglioramenti delle prestazioni
andremmo ad un cliente per esempio che aveva
enormi quantità di dati la prenderemmo
lontano dalla serata riscrivi la lezione
aggiungere alcuni piccoli miglioramenti
vedrebbero una performance di cinque volte
guadagna cinque volte meno memoria e tutto a
improvviso nello spazio di un giorno che ha dato
loro qualcosa che stavano per fare a
intero progetto da sei mesi oltre a e
l’abbiamo fatto in un giorno quindi se c’è
qualsiasi cosa tu possa andare via con qui
è questo è un cambiamento molto piccolo voi
puoi fare al tuo codice che fa un
enorme differenza sia al
le prestazioni e il modo in cui
la tua CPU usa la memoria che spero
ho avuto un po ‘ di tempo per alcuni
domande diverse da quelle che mi piacerebbe
molte grazie a qualsiasi domanda a
tutto a posto
programma c ++ qui bene, sono del mio
Lo sfondo di Microsoft quindi non essere
non mi sembrava così a meno che io
frainteso che hai governato
fuori compressione come un modo per migliorare
performance ma non so se lo sei
consapevole degli indici di columnstore di Microsoft
che loro usano mi sto solo chiedendo
se questo sarebbe un buon modo per ottenere
un fattore di compressione davvero molto buono
dai tuoi dati e anche un altro loro
tecnologie in memoria OLTP dove loro
utilizzare le funzioni di hash così secchi hash I
si chiedeva se combinando questo tipo di
due metodologie potrebbero farlo
una valida si sa aggiunta a si
assolutamente penso che la cosa più difficile noi
scoperto è che stavamo sorta di abbiamo pensato bene
questo è ciò che cambierà il
mondo nel mondo Java e poi vai
ai clienti e sono stati utilizzati così tanti
di quanto stiamo usando le ottimizzazioni esistenti
per aggirare questo in simili tipi di
un sacco di griglie di dati in memoria
aveva già una pre ottimizzazione per certo
cose e tu non sei efficacemente
competere con quello perché lo fai
completalo ma c’è un extra
un po ‘di lavoro che dovevamo fare
rendere questo complemento complementare al lavoro
con l’ottimizzazione esistente così dentro
rispondi alla tua domanda sì, può essere
usato perché c’è l’ottimizzazione e
stai aggiungendo più ottimizzazione è
a volte un po ‘più difficile da ottenere i due
per funzionare bene insieme ci siamo riusciti
che in ogni caso lo abbiamo gestito se
stai andando per qualcosa di completamente
alcuni senza supervisione cercano qualcosa
già pre ottimizzato hai un po ‘
un po ‘di lavoro extra da fare ma è stato fatto
una prestazione molto molto significativa
miglioramento e uno dei più voglio dire che i
stava usando Microsoft per la schiena negli anni ’90
prima che Max e Linux diventassero abbastanza
così disponibile così ho un lungo
sfondo nel mondo Microsoft come
bene e molti dei clienti usano
Microsoft e Microsoft non sono il
problema è solo il fatto che devi pagare
per le licenze e se puoi
fondamentalmente ridurre la quantità di macchine
stai usando riduci le licenze
un’altra domanda che ho visto una mano tremante io
pensato quando qualcuno appena tosse qualsiasi
più domande ok grazie mille
[Applausi]

Please follow and like us: