
oggi voglio presentarti un uso
caso come sotto perché del perché abbiamo scelto un
database per adattarsi piuttosto al nostro modello di dati
di cercare di adattare il nostro modello di dati a
il nostro database così con i negozi relazionali
hai praticamente insegnato che ce n’è uno
la dimensione si adatta a tutti per il tuo database così
capisci il tuo modello di dati e lo sarai
bene e abbiamo fatto il contrario quindi prima un
panoramica di ciò che facciamo su SoundCloud
quelle nuvole sonore sono una piattaforma sociale voi
posso pensarlo come Flickr per il suono o
YouTube per suoni e suoni sociali sono
nel nostro nucleo quindi questi sono questi
suona le piccole forme d’onda e sociali
attività intorno a loro come Mi piace e
commenti e favoriting z ‘ condivide il
questo è il modo in cui i suoni si propagano e dentro
questa rete sul nostro sito sui nostri dispositivi
e anche altri social network come
Facebook e Twitter quindi durante la registrazione
in SoundCloud ottieni questa pagina
panoramica dei suoni all’interno del
la rete suona di altri Creatori
gonfio e stiamo lavorando duro
mettere a punto quell’esperienza di ascolto così
se vuoi vedere il nostro prossimo
sito web puoi andare alla prossima fermata
SoundCloud è calmo e ottengo un’anteprima
abbiamo visto una buona adozione e
un po ‘di successo serviamo molto e noi conserviamo
molto e c’è un 20 milioni
utenti registrati che stanno anche aiutando
noi su di te sul web ma questo sta per
essere un discorso sui database e così dopo
l’introduzione di SoundCloud vuole presentarsi
questo parlare così pensando a cosa
presente spesso torno indietro e dico di dire
cosa dovrei dire al mio passato così lui
può essere più intelligente e in questo discorso volevo
chiedermi quale fosse il più
lezione importante che abbiamo imparato a
SoundCloud sull’utilizzo del nostro database e
risparmiarti la suspense
è semplicemente capire qual è il tuo
il database è per te così da metterlo dentro
prospettiva se questo fosse un
un’architettura o se se questa conferenza
era per la costruzione di architetti che rispondono
può venire sotto forma di capire cosa
i materiali da costruzione fanno per te e
non è troppo lontano nel mondo di
ingegneria strutturale è ancora
mettere insieme le scatole magari usando
cemento invece di frecce e volevo
per far brillare una luce su un piccolo sporco
segreto nel nostro mestiere non è tutto
funziona come previsto
quindi credici o no molti dei libri
che leggiamo vengono dall’esperienza
di cose che non funzionano ma c’è un
mancanza definita di condividere queste storie
nelle conferenze come questa e io voglio
per uscire da quella tendenza e parlare
su cose che non hanno funzionato così bene
tanto quanto le cose che hanno funzionato così sono
si, se lo stiamo usando il
metafora dei materiali da costruzione anche noi
serve una metafora delle astrazioni di cui abbiamo bisogno
queste astrazioni nel nostro lavoro per fare il nostro
posti di lavoro in modo efficace non possiamo essere in posa
mattoni ogni giorno e nel nostro mondo di
ingegneria viviamo sotto il
vincoli di fisicità così abbiamo
spazio e tempo e le leggi della fisica
come i nostri principali vincoli come ingegneri
quei vincoli dalla base del nostro
i materiali e le nostre astrazioni formano il
resto formano l’arte del nostro mestiere
così come un settore spesso mettiamo il nostro
paraocchi di astrazione su così significa
che potresti guardare al tuo problema
o potrebbe guardare il tuo codice sorgente
attraverso la facciata del tuo IDE puoi farlo
essere guardando le tue soluzioni al
immagini di magazzino di una brochure di venditori o
si può anche essere guardando il tuo
architettura con scatole e frecce
sono tutte astrazioni che ci aiutano a fare
i nostri lavori in modo efficace ma è troppo presto
che ci dimentichiamo i limiti del
mondo fisico e come questo si applica
le astrazioni che usiamo così viste
con questi occhi ho intenzione di introdurre
il caso di studio
ma prima mi va bene, mi dispiace, ho questo
questo caso studi andrà nei dettagli
un po ‘ in profondità, ma continuo a considerare
loro livello abbastanza alto dove lo sento
sono importanti per tutti noi da sapere
stiamo parlando di MySQL questo
era il data store che usavamo di più
dei nostri dati online e cassandra e
questo è l’archivio dati che abbiamo scelto di
sostituire mysql per caso d’uso specifico
i database sono cose diverse da
persone diverse e quindi ho intenzione di limitare
lo scopo di questo discorso è giusto
persistenza quindi non ho intenzione di parlare
sulla consistenza dell’acidità atomica
durata o transazionalità o base i
non riesco nemmeno a ricordare quale base dance floor
Sto solo per dire che lo scrivi tu
lo leggi che non va via e lì
può essere un qualche tipo di livello di colpo
dettagli Ho tempo dopo la discussione
in più profondità ho un po ‘di
tempo prima di prendere un aereo
così sarò cerco di lasciare un po ‘di tempo a
la fine del discorso per domande nel
pubblico e poi un po ‘sul podio
e alcuni di questi dettagli potrebbero essere vecchi
per te, ma indipendentemente dal fatto che il messaggio
è sempre lo stesso capisci il tuo
I materiali userò un po ‘di terminologia
chiamato memoria primaria e secondaria
archiviazione solo per cancellare quello primario
lo spazio di archiviazione è lo spazio di archiviazione collegato al tuo
La memoria secondaria della CPU è la memoria
collegato al bus I / O primario
lo spazio di archiviazione è la memoria secondaria RAM
sono i tuoi dischi e i materiali che sono
parlerò di quello che sarà
dischi rotanti così qualche volta durante il
parli potresti pensare oh, solo perché sei tu
sprecare la vita usa SSD e
tutto andrà bene e non lo è
il punto il punto è se lo si usa
Gli SSD li comprendono se non ne hai bisogno
per andare alla memoria secondaria capisci
la tua memoria principale se la tua soluzione
si adatta a Ram capire come la tua DRAM
funziona capire come il tuo bus di memoria
interagisce con la tua CPU e come la tua CPU
interagisce con
è di cassa e se ne hai di massicci
archiviazione e la scala exabyte, se lo sei
da Google qui i tuoi materiali sarebbero
nastro magnetico così puoi anche pensare che io sia
nel cloud non devo preoccupare di
archiviazione sono nel cloud non devo
preoccuparsi dell’hardware è il cloud
l’hardware per me, ma anche le nuvole
basato sugli stessi primi principi che
ci occupiamo dei suoi ingegneri basati su
stessi materiali e non si può ignorare voi
non posso ignorare l’ hardware che esegue il
cloud quindi si applicano le lezioni apprese
altrettanto bene nel cloud quindi i dati
che stiamo memorizzazione e servirla
compila il nostro Feed Attività è il suo è
la pagina del dashboard dopo che sei atterrato
accedi e questo display cambia quando
qualcuno nel tuo social network
contribuisce o crea un collegamento sociale
tra loro e un suono o se loro
caricare un suono da sé così questo è
sarà lo scopo del modello di dati
che abbiamo tolto le nostre primarie
archiviazione mi dispiace con il database principale
e hanno costruito una soluzione specializzata
per questo mangime per il bene del
il prodotto deve essere coerente quindi se tu
accedi una volta e vedi questi questi
tracce e quindi si accede nuovamente e il
la terza traccia è scomparsa
questa è un’esperienza incoerente e così
per noi come nello sviluppo del prodotto
è stato molto importante averlo
esperienza coerente e questo significava
risparmiando per noi la cosa più semplice che
potremmo salvarlo prima
e visualizzarlo una volta effettuato il login come
grafico del nostro modello di dati abbiamo gli spettatori
e i creatori sono entrambi gli utenti
c’è una relazione di seguire c’è
relazioni due creazioni nel sito e
poi c’è una riduzione transitiva da
spettatori a suoni su creatori e
le loro creazioni che abbiamo scelto di materializzare
il primo grado di questa traversata e
ciò che chiamiamo eventi
ci sono altre opzioni quando costruisci un
flusso di attività che puoi anche materializzare
che pagina su letto ma abbiamo scelto di
materializzarlo sulla destra per l’obiettivo di
mantenendo un’esperienza coerente e
averlo caricato velocemente, quindi volevamo
pre-calcolare tutti gli eventi così loro
sarebbe pronto quando la prossima volta
che chiunque si connetta così noi volevamo il nostro
gli obiettivi erano latenti e coerenti
esperienza come diagramma di relazione di un’entità
tipo di diagramma incompleto ma questo
è come puoi modellarlo con questo è come
di solito lo visualizzi in a
negozio relazionale e abbiamo appena preso questo
mappatura al primo grado di creazioni
e salvalo nel suo tavolo
sì, questo ha funzionato molto bene e
ci sono alcuni vantaggi per avere
questo perché in qualsiasi momento possiamo
torna indietro e ricostruisci il cruscotto
è anche robusto contro i cambiamenti al nostro
algoritmo quindi se diciamo che stiamo andando
per introdurre o rimuovere creazioni il
le creazioni precedenti non cambiano e così tu
può mantenere quell’esperienza coerente
e l’event store in MySQL ha funzionato
piuttosto bene ma ne abbiamo estrapolato alcuni
della nostra crescita nel rapporto di come
molto stiamo ripristinando contro quanti
account registrati che stavamo vedendo e
ci siamo resi conto che avremmo potuto essere in
guaio
ma in realtà eravamo nei guai
e stavamo vedendo fino a due secondi di
tempi di caricamento per alcuni di questi dashboard
e qualcosa che abbiamo cercato di ottimizzare
per un massimo anticipo facendo tutto questo lavoro
calcolo dashboard di tutti prima
hanno anche accesso e quindi eravamo eravamo
sconcertato come possiamo farlo noi
sto scrivendo bene ma stiamo leggendo lentamente
è completamente opposto alla nostra intuizione
di quali database relazionali sono buoni
per
e così ci siamo seduti e abbiamo cercato di farlo
capisco un po ‘del perché questo è stato
andando avanti
e io salterò in tempo nel
passato e in realtà descrivere ciò che era
andando avanti perché non avrebbe dovuto essere
così stavamo scrivendo solo
bene a causa di alcune proprietà naturali
del nostro set di dati in modo da illustrare che il
il tavolo che stavamo scrivendo aveva un
chiave surrogata che significa che questo era un
sequenza e una sequenza numerica che era
gestito dal database questa sequenza
creato un ordine che si avvicinava
l’ordine degli eventi che stavano arrivando
in e questo ha agito come un sequenziale
orologio e di conseguenza il database potrebbe
usa quello a suo vantaggio ora
capire cosa sta facendo il database
per te abbiamo bisogno di capire come
il database interagisce con il motore di archiviazione
con il materiale e usando un ODB a
motore di archiviazione il motore di archiviazione comune
per MySQL è davvero una fantastica soluzione
motore da MySQL è sufficiente lanciarlo
qualunque cosa e non perderà la tua
dati ed è ottimizzato per un ampio
classe di modelli di accesso è davvero
solo lo spazio di archiviazione per tutti gli usi
motore per lo stato mutabile mutevole e il
modo che gestisce questo è attentamente
equilibra un albero b in realtà un albero B + su
disco e questa struttura dati ne ha alcuni
rami e nelle sue foglie immagazzina il
registra così in un ODB tutto è un essere
albero anche i record pari
essi stessi sono memorizzati come un albero
in realtà sono memorizzati in un modulo indice
e in ODB questa è la memoria principale
per in ODB è come un indice cluster
significa che sono stati ordinati i record
sono ordinati fuori dalla chiave primaria così
con quella chiave primaria sequenziale otteniamo
le nostre foglie che contengono i nostri archivi
gruppo
le pagine che contengono le unità di i / o
così disposto in modo sequenziale sul disco così
il formato su disco che non eravamo
veramente consapevole di quando è diventato
per essere abbastanza efficiente è per questo che noi
sono stati in grado di ospitare così tanti
riscrive al secondo perché eravamo giusti
mantenere quell’ordine e scrivere quello giusto
dopo l’altro aggiungendo una pagina dopo
l’altro ma su Reed non abbiamo potuto leggere
in questo ordine dovevamo leggere di
quegli ID degli spettatori che stavano arrivando
ogni spettatore ottiene un indice univoco
vista e in quanto tale abbiamo bisogno di indicizzare il nostro
set di dati in modo che ogni spettatore possa tirare
fuori quei record e potremmo seguire
il prossimo grado degli attraversamenti e così via
nodb essendo un super b-tree memorizza il
indice anche nell’ordine dell’indice in un albero b
e su questa questa risulta essere avere
esattamente lo stesso formato dei record
attraversabile alle foglie in due pagine
con i valori delle foglie essere il
chiave primaria dell’articolo che il
indice secondario sta indicizzando in modo che cosa questo
quello che succede quando aggiungendo e
l’aggiornamento degli indici è quello quando
sei come stai aggiungendo sempre di più
articoli per le singole attività degli utenti
lo streaming potrebbe effettivamente riempire uno di
queste pagine così è una di queste unità IR
16 kilobyte e se ne hai di più
di 16 kilobyte di chiavi primarie in
questo nodb esegue una pagina divisa il
andrà a sbattere contro la pagina successiva quindi
non c’è più spazio l’ uno accanto all’altro
quindi non ho bisogno di andare fuori e creare un
nuova pagina tipicamente alla fine del
albero e riempirlo con il tuo indice così
questa è una caratteristica dei b-alberi
quando si esaurisce lo spazio necessario per
vai da qualche altra parte ma una volta ottenuto
quelle chiavi primarie e si va in
indice di indice primario clusterizzato che puoi
caricare pagine diverse solo per
ottenere un singolo record da ogni pagina e
ognuna delle pagine che si carica potrebbe
potenzialmente causare una ricerca potrebbe essere a
recensione per molti di voi ma io davvero
voglio trivellarlo in quel quel perché
I sikh sono importanti quando capiscono
il tuo database perché questo è ciò che questo
è quello che ci ha fatto il database è semplicemente un
API al tuo supporto di archiviazione che dà
alcune astrazioni per ragionare
i tuoi dati ma Sikh non sono qualcosa
che possiamo possiamo ignorare rapidamente
panoramica i dischi stanno girando è possibile
estraetene i dati o inseriteli sopra
tanto velocemente quanto stanno girando ma tu
bisogno di individuare dove si trova e sì
quando il momento in cui localizzi dove mettere
i dati sul dispositivo fisico che puoi
bisogno di spostarsi per dove sei e quello
causa una ricerca è difficile da
concettualizzare quanto siano in realtà cattivi
senza capire un po ‘o
avere un modello mentale del tempo e II
penso che sia importante per tutti noi per
rafforzare il nostro modello mentale, quindi questo è un
nanosecondo ed è un po ‘difficile da
visualizza perché non ho senso io
significa che hai fatto un toast e si apre
fuori in un nanosecondo o o cosa c’è
niente con cui abbiamo a che fare tranne il nostro
computer che funzionano in questa scala temporale
quindi se traduciamo questo tempo a distanza
possiamo avere un po ‘più di intuizione
riguardo a quanto tempo è così ogni
giorno non puoi andare più veloce della velocità
di luce a meno che non guardi le parole di Damien
e tu stai usando Perl così se noi se ne andiamo
la velocità della luce in un nanosecondo
ciò equivale alla distanza di circa
questo sul lato lungo di un pezzo
di carta di circa 30 centimetri quindi è così
questo è un nanosecondo che è quello
nanosecondo questo è il
unità fondamentale dei nostri computer questo
è ciò a cui stiamo elaborando il nostro codice
questo è ciò che questa è l’unità di
misura che misuriamo il nostro interiore
funziona questo è questo sono i
unità fondamentali del nostro calcolo
universo ma ancora queste sono le unità per
cercarlo potrebbe richiedere fino a 10 millisecondi
cercare e quindi quanto è lungo un a
segreto per un nanosecondo quanto è lungo
andando sul disco relativo al rimanere dentro
codice e quanto lontano potrebbe un elettrone
viaggiare alla velocità della luce in 10
millisecondi per darti un’idea 10
è come millisecondi per un elettrone
andare a Milano da qui e tornare indietro
quindi è come un viaggio in Italia
invia qualcosa al tuo disco e questo è
perché abbiamo iniziato a vedere quei due secondi
tempi di risposta quindi una volta che hai una ricerca
sai praticamente dove sei
i colli di bottiglia saranno la prossima cosa successiva
quello che abbiamo visto è che non erano solo le sei
è stato anche lo stoccaggio così dalla nostra crescita
sapevamo che non potevamo mantenere tutto nostro
eventi in un host e sapevamo anche che
stavamo creando sempre più pagine per
il nostro indice e questo era tutto per cosa
in fin dei conti erano in gran parte per lo più dati freddi
dati che non sarebbero mai stati caricati nel
in un giorno quindi più spazio di archiviazione abbiamo avuto
più spazio di archiviazione più che
richiesto più spazio tra i nostri
pagine che stavamo vedendo e più
sikh che stavamo incorrendo e sì
e abbiamo anche saputo estrapolando il nostro
crescita che non saremmo in grado di adattarci
su un host per molto più tempo quindi noi
ha preso una vista di 10.000 piedi e come un
ricordo che non lo sapevamo allora
quindi non lo sapevamo cosa ho appena
descritto e quindi abbiamo avuto solo 10.000
10.000 piedi di vista allora
non ci siamo resi conto di quello che eravamo
avere avuto un problema con il disco quello che abbiamo visto
Stavamo avendo un problema con il database
la documentazione su tutto questo è
nascosto nel mio sito di documentazione SQL
quindi alla fine lo abbiamo imparato ma al
il tempo che abbiamo visto è diventato troppo grande per noi
capacità di archiviazione ottenendo tempi di risposta
erano fuori ragione e si e no
avere un modo per mitigarlo con il
database su cui stavamo lavorando così noi
avere alcune domande difficili da chiedere a noi
Dovevamo chiederci cosa vogliamo fare
mantenere questa materializzazione a posto
strategia volevamo cambiare
tutto e andare con il
materializzazione in lettura e poi noi
considerato il prodotto e abbiamo preso in considerazione
la quantità di cambiamento che avrebbe richiesto
cambiare completamente il modo in cui noi
stavano visualizzando il Feed Attività e noi
detto sì, restiamo fedeli al
materializzazione a destra e guardiamo
nei database ma prima di guardare
i database che abbiamo passato un po ‘
di tempo capendo il nostro modello di dati e
sì alcuni dei alcuni sì del
le proprietà del nostro modello di dati erano abbastanza
benefico ed è alla fine
coerente e con questo intendo voglio dire
alla fine coerente in quanto i diritti
sono osservabili nello stesso ordine da qualsiasi
lettore ma in tempi diversi quindi se tu
scrivi se ci sono i diritti di un B e C
ogni lettore vedrà un B e C ma loro
potrebbe non vedere allo stesso tempo e loro
potrebbe non vedere B allo stesso tempo ma questo
va bene perché abbiamo solo un lettore
quindi se hai solo un lettore
tutto può essere alla fine coerente
finché il lettore non è lo scrittore
e per di più, perché la gente non lo fanno
accedi non tutti si collegano allo stesso
tempo potrebbe essere più giorni tra
login e quindi una lettura potrebbe essere stata
in realtà molto più tardi della nostra destra
sapevamo anche che avevamo scritto a caldo tutto il
contenuti creati in questo momento e così via
se lo realizzeremo per primo
grado del nostro grafico stiamo scrivendo tutto
nello stesso posto e non importa quanto velocemente
puoi andare se hai un punto caldo che sei
probabilmente andando a finire in un collo di bottiglia
alla fine quindi sapevamo che avevamo bisogno di
avere almeno qualche misura per essere in grado di
distribuire questi diritti su più
posizioni ma identificando i punti caldi
Significa anche che è possibile utilizzare alcuni
tecniche che puoi rimanere in primaria
stoccaggio per un po ‘ più lungo prima
andando all’archiviazione secondaria così puoi
fondamentalmente buffer nella RAM prima di scrivere
su disco e questo significherà questo significa
che puoi accettare di più ad un livello più alto
scrivi il tasso e poi svuotalo anche noi
aveva letto freddo così la maggior parte delle pagine che
stavamo rendendo noi stessi
rendering dalla memoria non c’era modo
che potremmo tenere il cruscotto di tutti
nella RAM questo sarebbe totalmente dispendioso a
uso della RAM e potremmo contare sul
spettatori una volta che caricano il loro cruscotto
caricare solo la testa del
cruscotto ordinato in ordine di tempo
una volta che trovano il loro indice noi
anche perché non volevamo stare con
volevamo evitare di avere degli hot spot
scrive e volevamo distribuire il
letture fredde e sapevamo che non eravamo cresciuti
in grado di adattarsi a un host sapevamo che i nostri dati
set necessario per essere partizionato e questo
era una delle cose più importanti
che abbiamo identificato è quello che abbiamo identificato
la nostra partizione chiave la cosa che noi
potrebbe dividere e la natura del
il modello di dati è che sono solo gli spettatori
che hanno bisogno del loro set di dati in modo che potessimo
partizione sul tasto del visualizzatore o sul
identificatore di visualizzatore e conoscendolo a
molte opzioni sono venute solo noi
doveva essere coerente su un singolo
partizione per un singolo ID visualizzatore
così dato con quello noi sì abbiamo bloccato con
l’ approccio pesante allo stoccaggio e di cui avevamo bisogno
crescere su più host quindi non c’è
davvero solo una cosa che potremmo fare
buttiamo l’hardware al problema così
sapevamo che dovevamo buttare più forte al
problema e ho pensato che avevamo bisogno di un nuovo
database abbiamo pensato perché abbiamo pensato
va bene se abbiamo più
macchine abbiamo bisogno di un database che può
vivere su più macchine relazionali
i database possono vivere su più macchine
ma abbiamo visto che c’era questo
Nel 2009 abbiamo visto un sacco di nuove tecnologie
sul mercato che aveva promesse di
solo facendo making partizione
partizionare un non-problema e quindi noi
valutato un po ‘del mercato ma
abbiamo anche valutato il nostro flusso di lavoro e come
il nostro flusso di lavoro si integrerebbe con
database che stavamo guardando
in definitiva quando hai dati in uno
forma e hai bisogno di farlo ad un altro
forma che applicherete questo
la tecnica secolare di un ETL va bene
questo alla fine è coerente nel suo
core perché io l’estrazione di ciascuno di questi
i passaggi si verificano in diverse transazioni
e o potrebbe accadere in diversi
transazioni e per noi l’estratto è stato
prendendo le modifiche come erano
accadendo la trasformazione stava trovando
quei bordi per materializzarsi prima e così
era la parte di carico che stavamo avendo
problemi con perché avevamo bisogno di scrivere
abbastanza bordi quindi questo è negli ordini di
centinaia di migliaia al secondo a
materializzare il nostro indice e ne avevamo bisogno
caricali in un modo ragionevole
attraverso più host ma ciò che realmente
voluto era approfittare del nostro
scrivi hot spot e scrivi tutto
nella memoria e quindi approfittarne
la nostra memoria secondaria e leggi
tutto da disco e da qualche parte dentro
tra noi non volevamo fare nulla
lavoro e questo è dove abbiamo avuto questo sogno
‘come quello che se potessimo farlo
quindi abbiamo iniziato a valutare i nostri database
basato su se possono riempire
la magia accade parte e si scopre
ne abbiamo trovato uno così Cassandra ha questo falso
dieci ma ne aveva anche molti altri
proprietà che erano piuttosto vantaggiose
essendo ignorante che effettivamente abbiamo avuto un
problema del disco che abbiamo deciso di lanciare
Cassandra a questo perché è allineato
con i nostri dati il nostro modello di dati e anche
offerto alcune comodità per rendere il nostro
ETL più semplice quindi Cassandra è alla fine
coerente nel suo nucleo così hai
probabilmente ho sentito parlare molto di un teorema di cappuccio
e Cassandra è nella sezione AP di
il teorema del cappuccio e ogni osservatore
ogni lettore su qualsiasi nodo vedrà il
scrive che è successo anche su altri nodi
alla fine ogni nodo è un maestro e un
slave in modo da poterti collegare a qualsiasi nodo in
il tuo cluster di database e leggi e scrivi
ad esso
si può pensare ad esso come come un
tabella hash distribuita in cui tu se
le scritture verranno indirizzate verso il
padrone di casa giusto e ben capito a
Replica multi data center quindi
credere più tardi nel brano Adrian lo farà
parla di come Netflix raggiunge questo
con la replica multi zona che è il
stessa cosa del multi data center
Replica multi-zona multi regione e
sì e questi diritti finali sono distribuiti
così come i diritti arrivano, possiamo dividere
fuori ed evitare questi hotspot di
distribuire i nostri diritti attraverso diversi
nodi nel cluster perché è possibile
scrivi a qualsiasi singolo cassandra
offre anche questo così il bello
la natura della nostra strada giusta con quello
sequenziale con le scritture sequenziali a
bel set di dati ordinati
e quindi anche le letture sequenziali significano
che possiamo effettivamente darlo
noi la promessa di non più viaggi a Milano
vedendo questo ho solo immaginato okay si
i sikh possono essere sotto controllo ma come
cassandra è una comprensione
del suo modello di dati ed è anche e il suo
modello di archiviazione quindi prima di iniziare con
Il modello di dati di Cassandra che è
importante capire così sapere come
cassandra accende il suo modello di dati
archiviazione su disco ed essere in una distrazione
sul livello di archiviazione che prima dobbiamo
capire cosa tipo di
astrazioni dobbiamo lavorare con così
Non mi è mai piaciuto SQL quando ho iniziato
Ho iniziato a scrivere istruzioni SQL. Faccio questo
così ho immaginato bene ho un po ‘
di dati qui sopra un po ‘di dati
qui faccio lo stesso schema e
allora voglio scegliere quali dati sono
andando a query da e questo ha sempre
mi ha infastidito perché concettualmente gruppo
il mio io raggruppa le mie partizioni nei tavoli
mentalmente e voglio selezionare quale
tavolo sto guardando che non l’ho fatto
avere qualche teoria sul perché questo
il linguaggio non lo consente ma io ho
sempre trovato fastidioso ma se potessimo
fai questo e potremmo creare 20 milioni
tavoli quindi partizionamento è un gioco da ragazzi
selezioniamo solo gli utenti dal
utente a ciascuna delle tabelle degli ID utente ora
sarebbe stato fantastico
oh sì e Cassandra sì Cassandra ha
questo modello è cotto ma ho anche voluto
per fare questo, quindi non sapevo del
schema del valore dell’attributo di entità, suppongo
dove puoi creare un tavolo e poi
puoi con quel tavolo che puoi creare
gli attributi arbitrari sono impostati sempre
volevo sapere quali attributi ho
disponibile e quindi li rendono super larghi
tavoli Voglio dire, questo è stato molto tempo fa ho
prepara tavoli super larghi e poi dillo
voglio quella chiamata
Lo chiamo in quella colonna che voglio sapere
quali colonne ci sono, quindi lo farò
un tavolo molto ampio ma di nuovo non si può fare
questo con SQL ma anche se potessi farlo
in consenso o tu ci sarebbe un c’è
un trade-off in Cassandra non si ottiene un
ordine flessibile per dichiarazione puoi solo
ordine per le colonne in modo da questo è bene che
significa solo che devi scegliere le tue colonne
con attenzione e sì si tratta di questo
per questo tipo di macellazione del
Metafora SQL quindi se guardiamo al reale
terminologia si può pensare ai dati
modello e Concentra come una matrice gigante
hai i nomi delle colonne delle righe e poi
i valori e all’incrocio di
la chiave di riga e il nome della colonna che puoi
trova il tuo valore e l’importante
differenza quando si considerano questi dati
il modello contro un modello relazionale è quello
puoi scansionare solo sopra le colonne
non si esegue la scansione delle righe e in
Cassandra l’ordine in cui esegui la scansione
sopra le colonne è definito nel tuo
schema quindi è come impostare quell’ordine
per affermazione, ma in anticipo è possibile
per modellare un set di dati come faresti tu
con un modello relazionale come se tu fossi
per fare il tavolo di un utente ne basta un po ‘
nomi di colonne che sono stabili, quindi è possibile
hai il tuo nome il tuo avatar URL tuo
email e questo andrebbe bene ma cosa
il sacrificio è che non è possibile eseguire la scansione
dammi tutte le righe che hanno un
il nome di battesimo di Bob Cassandra
indici secondari che non entreranno in
quelli ma questa sarebbe un’entità tipica
modellando in Cassandra perché Sandra può
fare un po ‘di più
quindi se usi la stessa chiave del tuo Oki
è come il tuo nel nome della tua colonna
potresti facilmente modellare una adiacenza
matrice e con questa puoi modellare a
grafico diretto e quindi solo le colonne
far crescere le file e puoi eseguire la scansione
dammi tutti i bordi in uscita che io
è anche per ogni dato nodo
possibile modellare la nostra attività esistente
flusso così se avessimo un globale
generatore di sequenza coerente che era
generando quegli ID di sequenza che potremmo
utilizzare il comparatore di colonne in e ordine
le nostre colonne nello stesso ordine di sequenza
quello che avevamo nel nostro negozio relazionale
ma se non lo avessimo a livello globale
contatore coerenti potremmo finire
creando duplicati e non è così
importante con il nostro set di dati, ma noi
ha deciso di modellarlo leggermente in modo diverso
per rendere i duplicati impossibili e noi
ha fatto questo usando l’orologio ma
anche il tempo può avere duplicati perché
non tutti gli orologi sono unici per essere realizzati
loro unici
li abbiamo codificati come uu ID quindi è a
variante della versione 1 uu ID in cui il
i bit alti sono dove vive il timestamp
pezzi bassi o dove vive l’unicità
quindi questo non è un SQL per me questo è no
SQL per me è quando modellate i dati
come vuoi leggerlo, ecco come
ci accediamo a cui accediamo
è nell’ordine del tempo basato sul nostro
comparatore di colonne e creeremo
una matrice molto sparsa di questo e noi siamo
trovo la fila per trovare le colonne
e avremo finito con esso e credo
la maggior parte dei database SQL noti fornisce
significa avere un controllo più fine del tuo
modelli di accesso basati su come te
modellarlo con i dati nel database ma
per i diritti
dobbiamo capire lo stoccaggio di Cassandra
il modello che è unico è diverso
allora in ODB all’inizio otteniamo a
un po ‘del partizionamento di
il modo in cui non ho intenzione di andare in profondità
sul partizionamento è uno dei suoi
punti di forza e ha un sacco di copertura
quindi puoi leggere più tardi ma
la rapida panoramica è quella per qualsiasi dato
tasto di riga utilizza solo la chiave di riga e
quindi trova un host da archiviare e recuperare
quella riga da essa può essere più di una
ospita se hai ridondanza e usiamo
il significato di partizionamento casuale dell’host
che qualsiasi chiave di riga data potrebbe essere su qualsiasi
host ma è prevedibile è per questo che noi
non è possibile eseguire scansioni di riga perché le chiavi di riga
potrebbe non essere sequenziale su ciascuno dei
nodi quindi il motore di archiviazione in MySQL sono
scusa a Cassandra è basata su
sezione nella carta BigTable di Google
che divide il problema esattamente dove
ci piacerebbe averlo diviso così per
per i diritti e per le letture hot il primario
l’archiviazione viene utilizzata in una struttura di dati
chiamate tabelle mem o tabelle di memoria queste
puoi pensare a loro come a un semplice hash
tavoli e per lo stoccaggio secondario per il nostro
diritti e anche la nostra fredda legge cassandra
la nostra carta BigTable presenta il
concetto di ordinata tabella delle stringhe l’ordinamento
delle tabelle delle stringhe sono dove la magia
succede perché se hai una specie di
struttura dei dati che puoi effettivamente dedurre
diventano un po ‘le tue ricerche
un intero come un grado più semplice in
complessità e questa stringa ordinata
tabella ti permette di mantenere quelli
letture sequenziali e sequenziali
scrive così in memoria come lo sono le scritture
entrando stanno entrando in qualsiasi ordine
potrebbero essere qualsiasi chiave di riga qualsiasi colonna
il nome non ha molta importanza perché
stanno andando ai negozi primari
stanno andando alla RAM
e quindi se hai una lettura immediata
dopo un diritto
non è nemmeno colpire il disco di Cassandra è
durevole quindi sarà impegnato per a
commit log prima di impegnarsi effettivamente a
il diritto o il tavolo mem così è ancora
veloce per accettare i diritti ma quando questo
la tabella si riempie e si riempirà come
stai aggiungendo cose per aggiungere modifiche
periodicamente deve essere eliminato
RAM ed è qui che Cassandra e
anche HBase prenderà le tabelle dei mem
ordinali dal Roky e ordinali
dai nomi delle colonne e per creare a
ordinamento stabile nella struttura e poi lo sarà
prendilo e scrivilo solo in modo sequenziale
su disco e quindi iniziare con una nuova zecca
grado è importante sapere che quel
nulla viene sovrascritto sul disco quindi nel
Albero B sai che DB spende molto lavoro
riutilizzare parti della pagina che stiamo utilizzando
porzioni delle pagine che le foglie
assicurati che come se fossi a corto di
spazio sulla licenza che lascerà aggiungere
uno nuovo e fa molta magia dentro
posiziona su questa lattina che la tiene ferma
il set di dati piuttosto denso qui è solo
lavata, ma ciò significa che
come si sta ideare tabelle di memoria fuori a
Tabelle SS sul disco che stai per essere
generando un sacco di tabelle SS perché
sarà solo con quello che eri
memorizzando nella RAM e questo potrebbe essere sì
I 100 top di 100 Meg non sono nemmeno io
pensiamo che siamo a 2 Meg di rete , ma noi
in realtà a livello ancora più piccolo o più piccolo
taglie così così che cosa si finisce con a
directory piena di tabelle SS e quando
eseguire una lettura potrebbe essere le colonne
vivere in più di un tavolo e così
Cassandra tiene un po ‘di contabilità in giro
di cosa sono le colonne e quali file
sono in cui le tabelle SS e quindi ha bisogno
per consultarli tutti
per soddisfare la tua lettura in modo da poter vedere se
non c’è davvero molta differenza se noi
se avessimo tutte queste tabelle SS su disco
questo sarebbe molto simile ad avere tutto
della nostra pagina si divide nel nostro essere albero e noi
saremmo cercando tutto il
posto per cercare di soddisfare una lettura così
cassandra ha una fase di compattazione che
leggerà questi numeri che leggeranno
un set di tavoli SS da quando sono
già ordinato l’unione è incredibilmente
efficiente e lo svuoterà
sequenzialmente e questa è una costante
processo di background che accade quello
converge le tabelle SS per ridurre il
numero di tabelle che devono essere
consultato prima che una lettura possa essere soddisfatta
ma anche così non puoi tenere tutto
compattato allo stesso tempo così faresti
pensa che saresti solo scambiato
cerca nell’albero B per cercare attraverso il
Tavoli SS per noi abbiamo un massimo di 20
Tavoli SS che consultiamo per i nostri
cruscotti quindi questo è questo è da a
un paio di giorni fa un istogramma di numero di
Tavoli SS consultati per tutte le nostre letture
completato dal numero di tabelle SS an
cosa importante da notare è che il
la tendenza va a sinistra
quindi la tendenza in cassandra è di ridurre
il numero di ricerche riduce il numero di
le tabelle che dovevano essere consultati o
le foglie che devono essere consultate ci sono
nel modo in cui stavamo usando il faggio
albero in MySQL quella tendenza era l’altra
direzione così è – cerca per tabella SS
e al 2020 le tabelle SS come massimo per
soddisfacendo le nostre letture ora sappiamo il nostro
upper bound our per rimbalzo 46 e con
questo noi abbiamo un grande noi abbiamo molto
più fiducia
ma anche a 46 si penserebbe
consultando tutti quei tavoli per il freddo
le letture aumenterebbero la latenza
così anche a Milano, dove siamo
consultando molti dei loro tavoli
ancora molto meglio di quanto eravamo con
MySQL quindi siamo sotto i 200
millisecondi nel nostro limite superiore per il
per soddisfare un cruscotto leggi e
queste sono le nostre letture fredde queste sono le
lo legge per qualcuno che non ha
loggato per un po ‘ che è necessario
tiriamo su nella RAM la nostra media è 20
millisecondi e questo è ancora un paio
viaggi a Milano ma è molto meglio di
stavamo facendo prima e scrive il nostro
tutto diversa unità di misura, in modo
quando vedi una distribuzione come questa
tu sai che lo stai facendo bene
perché è bello e stretto non lo fai
avere dei valori anomali che puoi semplicemente carino
molto ignorato l’ unità perché perché
stai facendo il tuo hai un prevedibile
distribuzione ma per noi questo non lo è
microsecondi e a questo carico nostro
cluster può facilmente prendere raffiche di 75.000
scrive al secondo così 75.000
materializzazioni di spigoli al secondo quindi
lo abbiamo fatto
quindi abbiamo affrontato alcune delle preoccupazioni
sul partizionamento con Cassandra siamo
accettando molte delle nostre molte scritture
da tutti questi lati che siamo
materializzarsi e abbiamo stabilizzato il nostro
tempi di caricamento e con il partizionamento
le tecniche che Cassandra ci ha dato
in grado di eseguire effettivamente un live
migrazione dei datacenter quindi abbiamo impostato questo
prima che ci trasferissimo dall’Inghilterra a
Amsterdam e questo questo database o questo
il cluster di database era l’unica cosa che
era online per tutto il tempo durante il
durante la transizione potremmo anche
accettare scritture da più data center
quindi stavamo scrivendo una scrittura ad Amsterdam
e in Inghilterra e si può trovare questo
incredibile ma quelle metriche su quelle
Layton vede provenivano da un cluster che è
eseguire un ec2 con notoriamente lento
IO IO x così sia con Cassandra che con
le tabelle SS e conosci DB con la sua B
alberi stanno usando i dischi
efficacemente ma in modi diversi così
Cassandra accetta molto bene le scritture casuali
bene molto meglio che in ODB ma come in
ODB sta creando le scritture casuali di
mantenendo l’indice ma una volta che
l’indice è stabilito in ODB fa molto
meglio per l’esecuzione di letture perché
può attraversare quello che quell’albero quello
con meno salti rispetto al numero di SS
tavoli che devi consultare ma
non è stata una grande esperienza con
Cassandra trascorriamo molto tempo
le operazioni dei nostri cluster e che abbiamo
circa dalle cinque alle dieci ore settimanali di
solo babysitter ci sono avvisi che
vai su quello dove i nodi non possono
comunicare la sua distribuzione ma e noi
capisco perché sta succedendo ma noi
Devo ancora rispondere ad esso e
periodicamente dobbiamo intervenire e
dì sì, devi andare giù per un po ‘
o sei stato giù troppo a lungo e
ne tireremo su un altro e nom come
un risultato che non abbiamo ancora risolto
quelli quei nodi ma se tu vai con
Cassandra ti puoi aspettare trading trading
in un momento per operazione di qualsiasi cosa
più grande di un cluster a cinque nodi e in
col senno di poi sappiamo ora esattamente come noi
l’avrei costruito con MySQL quindi
problema che stavamo avendo del nostro indice
dividerlo potrebbe facilmente essere mitigato
ottimizzando periodicamente la nostra tabella
riscrivere l’intero albero e
divisione che fino in porzioni più piccole in modo
non crea interruzioni o offerte
il nostro flusso di lavoro prima ETL e RAM
scrivere su MySQL per evitare di essere giù
durante quel tempo così per concludere questo
come adattiamo il nostro database ai nostri dati
modello abbiamo scritto molte cose molto
di cose intelligenti lungo la strada
abbiamo trovato la nostra chiave di partizione naturale noi
isolato un percorso di lettura da una strada giusta
abbiamo identificato il volume e l’accesso
modelli sia per la nostra lettura e scrittura
carica se fossero sequenziali o
casuale e abbiamo sviluppato una simpatia per
i materiali che stavano usando ma la maggior parte
importante non abbiamo mai dimenticato il nostro obiettivo di
consegnare un prodotto che ha preso a calci in culo
così abbiamo architettato per primo senza completamente
capire cosa è il nostro edificio
materiali sono stati perché abbiamo ipotizzato che
il nostro database nasconderà questo da
noi, quindi, se provi ad adattare i tuoi dati
modello al tuo database o se tu
scegli di adattare il tuo database ai tuoi dati
modello in definitiva il successo del tuo
design e la capacità di nascondere il tuo
l’ignoranza del pubblico è basata davvero
su quanto bene comprendi i materiali
con cui lavori, ecco fatto
grazie
caso come sotto perché del perché abbiamo scelto un
database per adattarsi piuttosto al nostro modello di dati
di cercare di adattare il nostro modello di dati a
il nostro database così con i negozi relazionali
hai praticamente insegnato che ce n’è uno
la dimensione si adatta a tutti per il tuo database così
capisci il tuo modello di dati e lo sarai
bene e abbiamo fatto il contrario quindi prima un
panoramica di ciò che facciamo su SoundCloud
quelle nuvole sonore sono una piattaforma sociale voi
posso pensarlo come Flickr per il suono o
YouTube per suoni e suoni sociali sono
nel nostro nucleo quindi questi sono questi
suona le piccole forme d’onda e sociali
attività intorno a loro come Mi piace e
commenti e favoriting z ‘ condivide il
questo è il modo in cui i suoni si propagano e dentro
questa rete sul nostro sito sui nostri dispositivi
e anche altri social network come
Facebook e Twitter quindi durante la registrazione
in SoundCloud ottieni questa pagina
panoramica dei suoni all’interno del
la rete suona di altri Creatori
gonfio e stiamo lavorando duro
mettere a punto quell’esperienza di ascolto così
se vuoi vedere il nostro prossimo
sito web puoi andare alla prossima fermata
SoundCloud è calmo e ottengo un’anteprima
abbiamo visto una buona adozione e
un po ‘di successo serviamo molto e noi conserviamo
molto e c’è un 20 milioni
utenti registrati che stanno anche aiutando
noi su di te sul web ma questo sta per
essere un discorso sui database e così dopo
l’introduzione di SoundCloud vuole presentarsi
questo parlare così pensando a cosa
presente spesso torno indietro e dico di dire
cosa dovrei dire al mio passato così lui
può essere più intelligente e in questo discorso volevo
chiedermi quale fosse il più
lezione importante che abbiamo imparato a
SoundCloud sull’utilizzo del nostro database e
risparmiarti la suspense
è semplicemente capire qual è il tuo
il database è per te così da metterlo dentro
prospettiva se questo fosse un
un’architettura o se se questa conferenza
era per la costruzione di architetti che rispondono
può venire sotto forma di capire cosa
i materiali da costruzione fanno per te e
non è troppo lontano nel mondo di
ingegneria strutturale è ancora
mettere insieme le scatole magari usando
cemento invece di frecce e volevo
per far brillare una luce su un piccolo sporco
segreto nel nostro mestiere non è tutto
funziona come previsto
quindi credici o no molti dei libri
che leggiamo vengono dall’esperienza
di cose che non funzionano ma c’è un
mancanza definita di condividere queste storie
nelle conferenze come questa e io voglio
per uscire da quella tendenza e parlare
su cose che non hanno funzionato così bene
tanto quanto le cose che hanno funzionato così sono
si, se lo stiamo usando il
metafora dei materiali da costruzione anche noi
serve una metafora delle astrazioni di cui abbiamo bisogno
queste astrazioni nel nostro lavoro per fare il nostro
posti di lavoro in modo efficace non possiamo essere in posa
mattoni ogni giorno e nel nostro mondo di
ingegneria viviamo sotto il
vincoli di fisicità così abbiamo
spazio e tempo e le leggi della fisica
come i nostri principali vincoli come ingegneri
quei vincoli dalla base del nostro
i materiali e le nostre astrazioni formano il
resto formano l’arte del nostro mestiere
così come un settore spesso mettiamo il nostro
paraocchi di astrazione su così significa
che potresti guardare al tuo problema
o potrebbe guardare il tuo codice sorgente
attraverso la facciata del tuo IDE puoi farlo
essere guardando le tue soluzioni al
immagini di magazzino di una brochure di venditori o
si può anche essere guardando il tuo
architettura con scatole e frecce
sono tutte astrazioni che ci aiutano a fare
i nostri lavori in modo efficace ma è troppo presto
che ci dimentichiamo i limiti del
mondo fisico e come questo si applica
le astrazioni che usiamo così viste
con questi occhi ho intenzione di introdurre
il caso di studio
ma prima mi va bene, mi dispiace, ho questo
questo caso studi andrà nei dettagli
un po ‘ in profondità, ma continuo a considerare
loro livello abbastanza alto dove lo sento
sono importanti per tutti noi da sapere
stiamo parlando di MySQL questo
era il data store che usavamo di più
dei nostri dati online e cassandra e
questo è l’archivio dati che abbiamo scelto di
sostituire mysql per caso d’uso specifico
i database sono cose diverse da
persone diverse e quindi ho intenzione di limitare
lo scopo di questo discorso è giusto
persistenza quindi non ho intenzione di parlare
sulla consistenza dell’acidità atomica
durata o transazionalità o base i
non riesco nemmeno a ricordare quale base dance floor
Sto solo per dire che lo scrivi tu
lo leggi che non va via e lì
può essere un qualche tipo di livello di colpo
dettagli Ho tempo dopo la discussione
in più profondità ho un po ‘di
tempo prima di prendere un aereo
così sarò cerco di lasciare un po ‘di tempo a
la fine del discorso per domande nel
pubblico e poi un po ‘sul podio
e alcuni di questi dettagli potrebbero essere vecchi
per te, ma indipendentemente dal fatto che il messaggio
è sempre lo stesso capisci il tuo
I materiali userò un po ‘di terminologia
chiamato memoria primaria e secondaria
archiviazione solo per cancellare quello primario
lo spazio di archiviazione è lo spazio di archiviazione collegato al tuo
La memoria secondaria della CPU è la memoria
collegato al bus I / O primario
lo spazio di archiviazione è la memoria secondaria RAM
sono i tuoi dischi e i materiali che sono
parlerò di quello che sarà
dischi rotanti così qualche volta durante il
parli potresti pensare oh, solo perché sei tu
sprecare la vita usa SSD e
tutto andrà bene e non lo è
il punto il punto è se lo si usa
Gli SSD li comprendono se non ne hai bisogno
per andare alla memoria secondaria capisci
la tua memoria principale se la tua soluzione
si adatta a Ram capire come la tua DRAM
funziona capire come il tuo bus di memoria
interagisce con la tua CPU e come la tua CPU
interagisce con
è di cassa e se ne hai di massicci
archiviazione e la scala exabyte, se lo sei
da Google qui i tuoi materiali sarebbero
nastro magnetico così puoi anche pensare che io sia
nel cloud non devo preoccupare di
archiviazione sono nel cloud non devo
preoccuparsi dell’hardware è il cloud
l’hardware per me, ma anche le nuvole
basato sugli stessi primi principi che
ci occupiamo dei suoi ingegneri basati su
stessi materiali e non si può ignorare voi
non posso ignorare l’ hardware che esegue il
cloud quindi si applicano le lezioni apprese
altrettanto bene nel cloud quindi i dati
che stiamo memorizzazione e servirla
compila il nostro Feed Attività è il suo è
la pagina del dashboard dopo che sei atterrato
accedi e questo display cambia quando
qualcuno nel tuo social network
contribuisce o crea un collegamento sociale
tra loro e un suono o se loro
caricare un suono da sé così questo è
sarà lo scopo del modello di dati
che abbiamo tolto le nostre primarie
archiviazione mi dispiace con il database principale
e hanno costruito una soluzione specializzata
per questo mangime per il bene del
il prodotto deve essere coerente quindi se tu
accedi una volta e vedi questi questi
tracce e quindi si accede nuovamente e il
la terza traccia è scomparsa
questa è un’esperienza incoerente e così
per noi come nello sviluppo del prodotto
è stato molto importante averlo
esperienza coerente e questo significava
risparmiando per noi la cosa più semplice che
potremmo salvarlo prima
e visualizzarlo una volta effettuato il login come
grafico del nostro modello di dati abbiamo gli spettatori
e i creatori sono entrambi gli utenti
c’è una relazione di seguire c’è
relazioni due creazioni nel sito e
poi c’è una riduzione transitiva da
spettatori a suoni su creatori e
le loro creazioni che abbiamo scelto di materializzare
il primo grado di questa traversata e
ciò che chiamiamo eventi
ci sono altre opzioni quando costruisci un
flusso di attività che puoi anche materializzare
che pagina su letto ma abbiamo scelto di
materializzarlo sulla destra per l’obiettivo di
mantenendo un’esperienza coerente e
averlo caricato velocemente, quindi volevamo
pre-calcolare tutti gli eventi così loro
sarebbe pronto quando la prossima volta
che chiunque si connetta così noi volevamo il nostro
gli obiettivi erano latenti e coerenti
esperienza come diagramma di relazione di un’entità
tipo di diagramma incompleto ma questo
è come puoi modellarlo con questo è come
di solito lo visualizzi in a
negozio relazionale e abbiamo appena preso questo
mappatura al primo grado di creazioni
e salvalo nel suo tavolo
sì, questo ha funzionato molto bene e
ci sono alcuni vantaggi per avere
questo perché in qualsiasi momento possiamo
torna indietro e ricostruisci il cruscotto
è anche robusto contro i cambiamenti al nostro
algoritmo quindi se diciamo che stiamo andando
per introdurre o rimuovere creazioni il
le creazioni precedenti non cambiano e così tu
può mantenere quell’esperienza coerente
e l’event store in MySQL ha funzionato
piuttosto bene ma ne abbiamo estrapolato alcuni
della nostra crescita nel rapporto di come
molto stiamo ripristinando contro quanti
account registrati che stavamo vedendo e
ci siamo resi conto che avremmo potuto essere in
guaio
ma in realtà eravamo nei guai
e stavamo vedendo fino a due secondi di
tempi di caricamento per alcuni di questi dashboard
e qualcosa che abbiamo cercato di ottimizzare
per un massimo anticipo facendo tutto questo lavoro
calcolo dashboard di tutti prima
hanno anche accesso e quindi eravamo eravamo
sconcertato come possiamo farlo noi
sto scrivendo bene ma stiamo leggendo lentamente
è completamente opposto alla nostra intuizione
di quali database relazionali sono buoni
per
e così ci siamo seduti e abbiamo cercato di farlo
capisco un po ‘del perché questo è stato
andando avanti
e io salterò in tempo nel
passato e in realtà descrivere ciò che era
andando avanti perché non avrebbe dovuto essere
così stavamo scrivendo solo
bene a causa di alcune proprietà naturali
del nostro set di dati in modo da illustrare che il
il tavolo che stavamo scrivendo aveva un
chiave surrogata che significa che questo era un
sequenza e una sequenza numerica che era
gestito dal database questa sequenza
creato un ordine che si avvicinava
l’ordine degli eventi che stavano arrivando
in e questo ha agito come un sequenziale
orologio e di conseguenza il database potrebbe
usa quello a suo vantaggio ora
capire cosa sta facendo il database
per te abbiamo bisogno di capire come
il database interagisce con il motore di archiviazione
con il materiale e usando un ODB a
motore di archiviazione il motore di archiviazione comune
per MySQL è davvero una fantastica soluzione
motore da MySQL è sufficiente lanciarlo
qualunque cosa e non perderà la tua
dati ed è ottimizzato per un ampio
classe di modelli di accesso è davvero
solo lo spazio di archiviazione per tutti gli usi
motore per lo stato mutabile mutevole e il
modo che gestisce questo è attentamente
equilibra un albero b in realtà un albero B + su
disco e questa struttura dati ne ha alcuni
rami e nelle sue foglie immagazzina il
registra così in un ODB tutto è un essere
albero anche i record pari
essi stessi sono memorizzati come un albero
in realtà sono memorizzati in un modulo indice
e in ODB questa è la memoria principale
per in ODB è come un indice cluster
significa che sono stati ordinati i record
sono ordinati fuori dalla chiave primaria così
con quella chiave primaria sequenziale otteniamo
le nostre foglie che contengono i nostri archivi
gruppo
le pagine che contengono le unità di i / o
così disposto in modo sequenziale sul disco così
il formato su disco che non eravamo
veramente consapevole di quando è diventato
per essere abbastanza efficiente è per questo che noi
sono stati in grado di ospitare così tanti
riscrive al secondo perché eravamo giusti
mantenere quell’ordine e scrivere quello giusto
dopo l’altro aggiungendo una pagina dopo
l’altro ma su Reed non abbiamo potuto leggere
in questo ordine dovevamo leggere di
quegli ID degli spettatori che stavano arrivando
ogni spettatore ottiene un indice univoco
vista e in quanto tale abbiamo bisogno di indicizzare il nostro
set di dati in modo che ogni spettatore possa tirare
fuori quei record e potremmo seguire
il prossimo grado degli attraversamenti e così via
nodb essendo un super b-tree memorizza il
indice anche nell’ordine dell’indice in un albero b
e su questa questa risulta essere avere
esattamente lo stesso formato dei record
attraversabile alle foglie in due pagine
con i valori delle foglie essere il
chiave primaria dell’articolo che il
indice secondario sta indicizzando in modo che cosa questo
quello che succede quando aggiungendo e
l’aggiornamento degli indici è quello quando
sei come stai aggiungendo sempre di più
articoli per le singole attività degli utenti
lo streaming potrebbe effettivamente riempire uno di
queste pagine così è una di queste unità IR
16 kilobyte e se ne hai di più
di 16 kilobyte di chiavi primarie in
questo nodb esegue una pagina divisa il
andrà a sbattere contro la pagina successiva quindi
non c’è più spazio l’ uno accanto all’altro
quindi non ho bisogno di andare fuori e creare un
nuova pagina tipicamente alla fine del
albero e riempirlo con il tuo indice così
questa è una caratteristica dei b-alberi
quando si esaurisce lo spazio necessario per
vai da qualche altra parte ma una volta ottenuto
quelle chiavi primarie e si va in
indice di indice primario clusterizzato che puoi
caricare pagine diverse solo per
ottenere un singolo record da ogni pagina e
ognuna delle pagine che si carica potrebbe
potenzialmente causare una ricerca potrebbe essere a
recensione per molti di voi ma io davvero
voglio trivellarlo in quel quel perché
I sikh sono importanti quando capiscono
il tuo database perché questo è ciò che questo
è quello che ci ha fatto il database è semplicemente un
API al tuo supporto di archiviazione che dà
alcune astrazioni per ragionare
i tuoi dati ma Sikh non sono qualcosa
che possiamo possiamo ignorare rapidamente
panoramica i dischi stanno girando è possibile
estraetene i dati o inseriteli sopra
tanto velocemente quanto stanno girando ma tu
bisogno di individuare dove si trova e sì
quando il momento in cui localizzi dove mettere
i dati sul dispositivo fisico che puoi
bisogno di spostarsi per dove sei e quello
causa una ricerca è difficile da
concettualizzare quanto siano in realtà cattivi
senza capire un po ‘o
avere un modello mentale del tempo e II
penso che sia importante per tutti noi per
rafforzare il nostro modello mentale, quindi questo è un
nanosecondo ed è un po ‘difficile da
visualizza perché non ho senso io
significa che hai fatto un toast e si apre
fuori in un nanosecondo o o cosa c’è
niente con cui abbiamo a che fare tranne il nostro
computer che funzionano in questa scala temporale
quindi se traduciamo questo tempo a distanza
possiamo avere un po ‘più di intuizione
riguardo a quanto tempo è così ogni
giorno non puoi andare più veloce della velocità
di luce a meno che non guardi le parole di Damien
e tu stai usando Perl così se noi se ne andiamo
la velocità della luce in un nanosecondo
ciò equivale alla distanza di circa
questo sul lato lungo di un pezzo
di carta di circa 30 centimetri quindi è così
questo è un nanosecondo che è quello
nanosecondo questo è il
unità fondamentale dei nostri computer questo
è ciò a cui stiamo elaborando il nostro codice
questo è ciò che questa è l’unità di
misura che misuriamo il nostro interiore
funziona questo è questo sono i
unità fondamentali del nostro calcolo
universo ma ancora queste sono le unità per
cercarlo potrebbe richiedere fino a 10 millisecondi
cercare e quindi quanto è lungo un a
segreto per un nanosecondo quanto è lungo
andando sul disco relativo al rimanere dentro
codice e quanto lontano potrebbe un elettrone
viaggiare alla velocità della luce in 10
millisecondi per darti un’idea 10
è come millisecondi per un elettrone
andare a Milano da qui e tornare indietro
quindi è come un viaggio in Italia
invia qualcosa al tuo disco e questo è
perché abbiamo iniziato a vedere quei due secondi
tempi di risposta quindi una volta che hai una ricerca
sai praticamente dove sei
i colli di bottiglia saranno la prossima cosa successiva
quello che abbiamo visto è che non erano solo le sei
è stato anche lo stoccaggio così dalla nostra crescita
sapevamo che non potevamo mantenere tutto nostro
eventi in un host e sapevamo anche che
stavamo creando sempre più pagine per
il nostro indice e questo era tutto per cosa
in fin dei conti erano in gran parte per lo più dati freddi
dati che non sarebbero mai stati caricati nel
in un giorno quindi più spazio di archiviazione abbiamo avuto
più spazio di archiviazione più che
richiesto più spazio tra i nostri
pagine che stavamo vedendo e più
sikh che stavamo incorrendo e sì
e abbiamo anche saputo estrapolando il nostro
crescita che non saremmo in grado di adattarci
su un host per molto più tempo quindi noi
ha preso una vista di 10.000 piedi e come un
ricordo che non lo sapevamo allora
quindi non lo sapevamo cosa ho appena
descritto e quindi abbiamo avuto solo 10.000
10.000 piedi di vista allora
non ci siamo resi conto di quello che eravamo
avere avuto un problema con il disco quello che abbiamo visto
Stavamo avendo un problema con il database
la documentazione su tutto questo è
nascosto nel mio sito di documentazione SQL
quindi alla fine lo abbiamo imparato ma al
il tempo che abbiamo visto è diventato troppo grande per noi
capacità di archiviazione ottenendo tempi di risposta
erano fuori ragione e si e no
avere un modo per mitigarlo con il
database su cui stavamo lavorando così noi
avere alcune domande difficili da chiedere a noi
Dovevamo chiederci cosa vogliamo fare
mantenere questa materializzazione a posto
strategia volevamo cambiare
tutto e andare con il
materializzazione in lettura e poi noi
considerato il prodotto e abbiamo preso in considerazione
la quantità di cambiamento che avrebbe richiesto
cambiare completamente il modo in cui noi
stavano visualizzando il Feed Attività e noi
detto sì, restiamo fedeli al
materializzazione a destra e guardiamo
nei database ma prima di guardare
i database che abbiamo passato un po ‘
di tempo capendo il nostro modello di dati e
sì alcuni dei alcuni sì del
le proprietà del nostro modello di dati erano abbastanza
benefico ed è alla fine
coerente e con questo intendo voglio dire
alla fine coerente in quanto i diritti
sono osservabili nello stesso ordine da qualsiasi
lettore ma in tempi diversi quindi se tu
scrivi se ci sono i diritti di un B e C
ogni lettore vedrà un B e C ma loro
potrebbe non vedere allo stesso tempo e loro
potrebbe non vedere B allo stesso tempo ma questo
va bene perché abbiamo solo un lettore
quindi se hai solo un lettore
tutto può essere alla fine coerente
finché il lettore non è lo scrittore
e per di più, perché la gente non lo fanno
accedi non tutti si collegano allo stesso
tempo potrebbe essere più giorni tra
login e quindi una lettura potrebbe essere stata
in realtà molto più tardi della nostra destra
sapevamo anche che avevamo scritto a caldo tutto il
contenuti creati in questo momento e così via
se lo realizzeremo per primo
grado del nostro grafico stiamo scrivendo tutto
nello stesso posto e non importa quanto velocemente
puoi andare se hai un punto caldo che sei
probabilmente andando a finire in un collo di bottiglia
alla fine quindi sapevamo che avevamo bisogno di
avere almeno qualche misura per essere in grado di
distribuire questi diritti su più
posizioni ma identificando i punti caldi
Significa anche che è possibile utilizzare alcuni
tecniche che puoi rimanere in primaria
stoccaggio per un po ‘ più lungo prima
andando all’archiviazione secondaria così puoi
fondamentalmente buffer nella RAM prima di scrivere
su disco e questo significherà questo significa
che puoi accettare di più ad un livello più alto
scrivi il tasso e poi svuotalo anche noi
aveva letto freddo così la maggior parte delle pagine che
stavamo rendendo noi stessi
rendering dalla memoria non c’era modo
che potremmo tenere il cruscotto di tutti
nella RAM questo sarebbe totalmente dispendioso a
uso della RAM e potremmo contare sul
spettatori una volta che caricano il loro cruscotto
caricare solo la testa del
cruscotto ordinato in ordine di tempo
una volta che trovano il loro indice noi
anche perché non volevamo stare con
volevamo evitare di avere degli hot spot
scrive e volevamo distribuire il
letture fredde e sapevamo che non eravamo cresciuti
in grado di adattarsi a un host sapevamo che i nostri dati
set necessario per essere partizionato e questo
era una delle cose più importanti
che abbiamo identificato è quello che abbiamo identificato
la nostra partizione chiave la cosa che noi
potrebbe dividere e la natura del
il modello di dati è che sono solo gli spettatori
che hanno bisogno del loro set di dati in modo che potessimo
partizione sul tasto del visualizzatore o sul
identificatore di visualizzatore e conoscendolo a
molte opzioni sono venute solo noi
doveva essere coerente su un singolo
partizione per un singolo ID visualizzatore
così dato con quello noi sì abbiamo bloccato con
l’ approccio pesante allo stoccaggio e di cui avevamo bisogno
crescere su più host quindi non c’è
davvero solo una cosa che potremmo fare
buttiamo l’hardware al problema così
sapevamo che dovevamo buttare più forte al
problema e ho pensato che avevamo bisogno di un nuovo
database abbiamo pensato perché abbiamo pensato
va bene se abbiamo più
macchine abbiamo bisogno di un database che può
vivere su più macchine relazionali
i database possono vivere su più macchine
ma abbiamo visto che c’era questo
Nel 2009 abbiamo visto un sacco di nuove tecnologie
sul mercato che aveva promesse di
solo facendo making partizione
partizionare un non-problema e quindi noi
valutato un po ‘del mercato ma
abbiamo anche valutato il nostro flusso di lavoro e come
il nostro flusso di lavoro si integrerebbe con
database che stavamo guardando
in definitiva quando hai dati in uno
forma e hai bisogno di farlo ad un altro
forma che applicherete questo
la tecnica secolare di un ETL va bene
questo alla fine è coerente nel suo
core perché io l’estrazione di ciascuno di questi
i passaggi si verificano in diverse transazioni
e o potrebbe accadere in diversi
transazioni e per noi l’estratto è stato
prendendo le modifiche come erano
accadendo la trasformazione stava trovando
quei bordi per materializzarsi prima e così
era la parte di carico che stavamo avendo
problemi con perché avevamo bisogno di scrivere
abbastanza bordi quindi questo è negli ordini di
centinaia di migliaia al secondo a
materializzare il nostro indice e ne avevamo bisogno
caricali in un modo ragionevole
attraverso più host ma ciò che realmente
voluto era approfittare del nostro
scrivi hot spot e scrivi tutto
nella memoria e quindi approfittarne
la nostra memoria secondaria e leggi
tutto da disco e da qualche parte dentro
tra noi non volevamo fare nulla
lavoro e questo è dove abbiamo avuto questo sogno
‘come quello che se potessimo farlo
quindi abbiamo iniziato a valutare i nostri database
basato su se possono riempire
la magia accade parte e si scopre
ne abbiamo trovato uno così Cassandra ha questo falso
dieci ma ne aveva anche molti altri
proprietà che erano piuttosto vantaggiose
essendo ignorante che effettivamente abbiamo avuto un
problema del disco che abbiamo deciso di lanciare
Cassandra a questo perché è allineato
con i nostri dati il nostro modello di dati e anche
offerto alcune comodità per rendere il nostro
ETL più semplice quindi Cassandra è alla fine
coerente nel suo nucleo così hai
probabilmente ho sentito parlare molto di un teorema di cappuccio
e Cassandra è nella sezione AP di
il teorema del cappuccio e ogni osservatore
ogni lettore su qualsiasi nodo vedrà il
scrive che è successo anche su altri nodi
alla fine ogni nodo è un maestro e un
slave in modo da poterti collegare a qualsiasi nodo in
il tuo cluster di database e leggi e scrivi
ad esso
si può pensare ad esso come come un
tabella hash distribuita in cui tu se
le scritture verranno indirizzate verso il
padrone di casa giusto e ben capito a
Replica multi data center quindi
credere più tardi nel brano Adrian lo farà
parla di come Netflix raggiunge questo
con la replica multi zona che è il
stessa cosa del multi data center
Replica multi-zona multi regione e
sì e questi diritti finali sono distribuiti
così come i diritti arrivano, possiamo dividere
fuori ed evitare questi hotspot di
distribuire i nostri diritti attraverso diversi
nodi nel cluster perché è possibile
scrivi a qualsiasi singolo cassandra
offre anche questo così il bello
la natura della nostra strada giusta con quello
sequenziale con le scritture sequenziali a
bel set di dati ordinati
e quindi anche le letture sequenziali significano
che possiamo effettivamente darlo
noi la promessa di non più viaggi a Milano
vedendo questo ho solo immaginato okay si
i sikh possono essere sotto controllo ma come
cassandra è una comprensione
del suo modello di dati ed è anche e il suo
modello di archiviazione quindi prima di iniziare con
Il modello di dati di Cassandra che è
importante capire così sapere come
cassandra accende il suo modello di dati
archiviazione su disco ed essere in una distrazione
sul livello di archiviazione che prima dobbiamo
capire cosa tipo di
astrazioni dobbiamo lavorare con così
Non mi è mai piaciuto SQL quando ho iniziato
Ho iniziato a scrivere istruzioni SQL. Faccio questo
così ho immaginato bene ho un po ‘
di dati qui sopra un po ‘di dati
qui faccio lo stesso schema e
allora voglio scegliere quali dati sono
andando a query da e questo ha sempre
mi ha infastidito perché concettualmente gruppo
il mio io raggruppa le mie partizioni nei tavoli
mentalmente e voglio selezionare quale
tavolo sto guardando che non l’ho fatto
avere qualche teoria sul perché questo
il linguaggio non lo consente ma io ho
sempre trovato fastidioso ma se potessimo
fai questo e potremmo creare 20 milioni
tavoli quindi partizionamento è un gioco da ragazzi
selezioniamo solo gli utenti dal
utente a ciascuna delle tabelle degli ID utente ora
sarebbe stato fantastico
oh sì e Cassandra sì Cassandra ha
questo modello è cotto ma ho anche voluto
per fare questo, quindi non sapevo del
schema del valore dell’attributo di entità, suppongo
dove puoi creare un tavolo e poi
puoi con quel tavolo che puoi creare
gli attributi arbitrari sono impostati sempre
volevo sapere quali attributi ho
disponibile e quindi li rendono super larghi
tavoli Voglio dire, questo è stato molto tempo fa ho
prepara tavoli super larghi e poi dillo
voglio quella chiamata
Lo chiamo in quella colonna che voglio sapere
quali colonne ci sono, quindi lo farò
un tavolo molto ampio ma di nuovo non si può fare
questo con SQL ma anche se potessi farlo
in consenso o tu ci sarebbe un c’è
un trade-off in Cassandra non si ottiene un
ordine flessibile per dichiarazione puoi solo
ordine per le colonne in modo da questo è bene che
significa solo che devi scegliere le tue colonne
con attenzione e sì si tratta di questo
per questo tipo di macellazione del
Metafora SQL quindi se guardiamo al reale
terminologia si può pensare ai dati
modello e Concentra come una matrice gigante
hai i nomi delle colonne delle righe e poi
i valori e all’incrocio di
la chiave di riga e il nome della colonna che puoi
trova il tuo valore e l’importante
differenza quando si considerano questi dati
il modello contro un modello relazionale è quello
puoi scansionare solo sopra le colonne
non si esegue la scansione delle righe e in
Cassandra l’ordine in cui esegui la scansione
sopra le colonne è definito nel tuo
schema quindi è come impostare quell’ordine
per affermazione, ma in anticipo è possibile
per modellare un set di dati come faresti tu
con un modello relazionale come se tu fossi
per fare il tavolo di un utente ne basta un po ‘
nomi di colonne che sono stabili, quindi è possibile
hai il tuo nome il tuo avatar URL tuo
email e questo andrebbe bene ma cosa
il sacrificio è che non è possibile eseguire la scansione
dammi tutte le righe che hanno un
il nome di battesimo di Bob Cassandra
indici secondari che non entreranno in
quelli ma questa sarebbe un’entità tipica
modellando in Cassandra perché Sandra può
fare un po ‘di più
quindi se usi la stessa chiave del tuo Oki
è come il tuo nel nome della tua colonna
potresti facilmente modellare una adiacenza
matrice e con questa puoi modellare a
grafico diretto e quindi solo le colonne
far crescere le file e puoi eseguire la scansione
dammi tutti i bordi in uscita che io
è anche per ogni dato nodo
possibile modellare la nostra attività esistente
flusso così se avessimo un globale
generatore di sequenza coerente che era
generando quegli ID di sequenza che potremmo
utilizzare il comparatore di colonne in e ordine
le nostre colonne nello stesso ordine di sequenza
quello che avevamo nel nostro negozio relazionale
ma se non lo avessimo a livello globale
contatore coerenti potremmo finire
creando duplicati e non è così
importante con il nostro set di dati, ma noi
ha deciso di modellarlo leggermente in modo diverso
per rendere i duplicati impossibili e noi
ha fatto questo usando l’orologio ma
anche il tempo può avere duplicati perché
non tutti gli orologi sono unici per essere realizzati
loro unici
li abbiamo codificati come uu ID quindi è a
variante della versione 1 uu ID in cui il
i bit alti sono dove vive il timestamp
pezzi bassi o dove vive l’unicità
quindi questo non è un SQL per me questo è no
SQL per me è quando modellate i dati
come vuoi leggerlo, ecco come
ci accediamo a cui accediamo
è nell’ordine del tempo basato sul nostro
comparatore di colonne e creeremo
una matrice molto sparsa di questo e noi siamo
trovo la fila per trovare le colonne
e avremo finito con esso e credo
la maggior parte dei database SQL noti fornisce
significa avere un controllo più fine del tuo
modelli di accesso basati su come te
modellarlo con i dati nel database ma
per i diritti
dobbiamo capire lo stoccaggio di Cassandra
il modello che è unico è diverso
allora in ODB all’inizio otteniamo a
un po ‘del partizionamento di
il modo in cui non ho intenzione di andare in profondità
sul partizionamento è uno dei suoi
punti di forza e ha un sacco di copertura
quindi puoi leggere più tardi ma
la rapida panoramica è quella per qualsiasi dato
tasto di riga utilizza solo la chiave di riga e
quindi trova un host da archiviare e recuperare
quella riga da essa può essere più di una
ospita se hai ridondanza e usiamo
il significato di partizionamento casuale dell’host
che qualsiasi chiave di riga data potrebbe essere su qualsiasi
host ma è prevedibile è per questo che noi
non è possibile eseguire scansioni di riga perché le chiavi di riga
potrebbe non essere sequenziale su ciascuno dei
nodi quindi il motore di archiviazione in MySQL sono
scusa a Cassandra è basata su
sezione nella carta BigTable di Google
che divide il problema esattamente dove
ci piacerebbe averlo diviso così per
per i diritti e per le letture hot il primario
l’archiviazione viene utilizzata in una struttura di dati
chiamate tabelle mem o tabelle di memoria queste
puoi pensare a loro come a un semplice hash
tavoli e per lo stoccaggio secondario per il nostro
diritti e anche la nostra fredda legge cassandra
la nostra carta BigTable presenta il
concetto di ordinata tabella delle stringhe l’ordinamento
delle tabelle delle stringhe sono dove la magia
succede perché se hai una specie di
struttura dei dati che puoi effettivamente dedurre
diventano un po ‘le tue ricerche
un intero come un grado più semplice in
complessità e questa stringa ordinata
tabella ti permette di mantenere quelli
letture sequenziali e sequenziali
scrive così in memoria come lo sono le scritture
entrando stanno entrando in qualsiasi ordine
potrebbero essere qualsiasi chiave di riga qualsiasi colonna
il nome non ha molta importanza perché
stanno andando ai negozi primari
stanno andando alla RAM
e quindi se hai una lettura immediata
dopo un diritto
non è nemmeno colpire il disco di Cassandra è
durevole quindi sarà impegnato per a
commit log prima di impegnarsi effettivamente a
il diritto o il tavolo mem così è ancora
veloce per accettare i diritti ma quando questo
la tabella si riempie e si riempirà come
stai aggiungendo cose per aggiungere modifiche
periodicamente deve essere eliminato
RAM ed è qui che Cassandra e
anche HBase prenderà le tabelle dei mem
ordinali dal Roky e ordinali
dai nomi delle colonne e per creare a
ordinamento stabile nella struttura e poi lo sarà
prendilo e scrivilo solo in modo sequenziale
su disco e quindi iniziare con una nuova zecca
grado è importante sapere che quel
nulla viene sovrascritto sul disco quindi nel
Albero B sai che DB spende molto lavoro
riutilizzare parti della pagina che stiamo utilizzando
porzioni delle pagine che le foglie
assicurati che come se fossi a corto di
spazio sulla licenza che lascerà aggiungere
uno nuovo e fa molta magia dentro
posiziona su questa lattina che la tiene ferma
il set di dati piuttosto denso qui è solo
lavata, ma ciò significa che
come si sta ideare tabelle di memoria fuori a
Tabelle SS sul disco che stai per essere
generando un sacco di tabelle SS perché
sarà solo con quello che eri
memorizzando nella RAM e questo potrebbe essere sì
I 100 top di 100 Meg non sono nemmeno io
pensiamo che siamo a 2 Meg di rete , ma noi
in realtà a livello ancora più piccolo o più piccolo
taglie così così che cosa si finisce con a
directory piena di tabelle SS e quando
eseguire una lettura potrebbe essere le colonne
vivere in più di un tavolo e così
Cassandra tiene un po ‘di contabilità in giro
di cosa sono le colonne e quali file
sono in cui le tabelle SS e quindi ha bisogno
per consultarli tutti
per soddisfare la tua lettura in modo da poter vedere se
non c’è davvero molta differenza se noi
se avessimo tutte queste tabelle SS su disco
questo sarebbe molto simile ad avere tutto
della nostra pagina si divide nel nostro essere albero e noi
saremmo cercando tutto il
posto per cercare di soddisfare una lettura così
cassandra ha una fase di compattazione che
leggerà questi numeri che leggeranno
un set di tavoli SS da quando sono
già ordinato l’unione è incredibilmente
efficiente e lo svuoterà
sequenzialmente e questa è una costante
processo di background che accade quello
converge le tabelle SS per ridurre il
numero di tabelle che devono essere
consultato prima che una lettura possa essere soddisfatta
ma anche così non puoi tenere tutto
compattato allo stesso tempo così faresti
pensa che saresti solo scambiato
cerca nell’albero B per cercare attraverso il
Tavoli SS per noi abbiamo un massimo di 20
Tavoli SS che consultiamo per i nostri
cruscotti quindi questo è questo è da a
un paio di giorni fa un istogramma di numero di
Tavoli SS consultati per tutte le nostre letture
completato dal numero di tabelle SS an
cosa importante da notare è che il
la tendenza va a sinistra
quindi la tendenza in cassandra è di ridurre
il numero di ricerche riduce il numero di
le tabelle che dovevano essere consultati o
le foglie che devono essere consultate ci sono
nel modo in cui stavamo usando il faggio
albero in MySQL quella tendenza era l’altra
direzione così è – cerca per tabella SS
e al 2020 le tabelle SS come massimo per
soddisfacendo le nostre letture ora sappiamo il nostro
upper bound our per rimbalzo 46 e con
questo noi abbiamo un grande noi abbiamo molto
più fiducia
ma anche a 46 si penserebbe
consultando tutti quei tavoli per il freddo
le letture aumenterebbero la latenza
così anche a Milano, dove siamo
consultando molti dei loro tavoli
ancora molto meglio di quanto eravamo con
MySQL quindi siamo sotto i 200
millisecondi nel nostro limite superiore per il
per soddisfare un cruscotto leggi e
queste sono le nostre letture fredde queste sono le
lo legge per qualcuno che non ha
loggato per un po ‘ che è necessario
tiriamo su nella RAM la nostra media è 20
millisecondi e questo è ancora un paio
viaggi a Milano ma è molto meglio di
stavamo facendo prima e scrive il nostro
tutto diversa unità di misura, in modo
quando vedi una distribuzione come questa
tu sai che lo stai facendo bene
perché è bello e stretto non lo fai
avere dei valori anomali che puoi semplicemente carino
molto ignorato l’ unità perché perché
stai facendo il tuo hai un prevedibile
distribuzione ma per noi questo non lo è
microsecondi e a questo carico nostro
cluster può facilmente prendere raffiche di 75.000
scrive al secondo così 75.000
materializzazioni di spigoli al secondo quindi
lo abbiamo fatto
quindi abbiamo affrontato alcune delle preoccupazioni
sul partizionamento con Cassandra siamo
accettando molte delle nostre molte scritture
da tutti questi lati che siamo
materializzarsi e abbiamo stabilizzato il nostro
tempi di caricamento e con il partizionamento
le tecniche che Cassandra ci ha dato
in grado di eseguire effettivamente un live
migrazione dei datacenter quindi abbiamo impostato questo
prima che ci trasferissimo dall’Inghilterra a
Amsterdam e questo questo database o questo
il cluster di database era l’unica cosa che
era online per tutto il tempo durante il
durante la transizione potremmo anche
accettare scritture da più data center
quindi stavamo scrivendo una scrittura ad Amsterdam
e in Inghilterra e si può trovare questo
incredibile ma quelle metriche su quelle
Layton vede provenivano da un cluster che è
eseguire un ec2 con notoriamente lento
IO IO x così sia con Cassandra che con
le tabelle SS e conosci DB con la sua B
alberi stanno usando i dischi
efficacemente ma in modi diversi così
Cassandra accetta molto bene le scritture casuali
bene molto meglio che in ODB ma come in
ODB sta creando le scritture casuali di
mantenendo l’indice ma una volta che
l’indice è stabilito in ODB fa molto
meglio per l’esecuzione di letture perché
può attraversare quello che quell’albero quello
con meno salti rispetto al numero di SS
tavoli che devi consultare ma
non è stata una grande esperienza con
Cassandra trascorriamo molto tempo
le operazioni dei nostri cluster e che abbiamo
circa dalle cinque alle dieci ore settimanali di
solo babysitter ci sono avvisi che
vai su quello dove i nodi non possono
comunicare la sua distribuzione ma e noi
capisco perché sta succedendo ma noi
Devo ancora rispondere ad esso e
periodicamente dobbiamo intervenire e
dì sì, devi andare giù per un po ‘
o sei stato giù troppo a lungo e
ne tireremo su un altro e nom come
un risultato che non abbiamo ancora risolto
quelli quei nodi ma se tu vai con
Cassandra ti puoi aspettare trading trading
in un momento per operazione di qualsiasi cosa
più grande di un cluster a cinque nodi e in
col senno di poi sappiamo ora esattamente come noi
l’avrei costruito con MySQL quindi
problema che stavamo avendo del nostro indice
dividerlo potrebbe facilmente essere mitigato
ottimizzando periodicamente la nostra tabella
riscrivere l’intero albero e
divisione che fino in porzioni più piccole in modo
non crea interruzioni o offerte
il nostro flusso di lavoro prima ETL e RAM
scrivere su MySQL per evitare di essere giù
durante quel tempo così per concludere questo
come adattiamo il nostro database ai nostri dati
modello abbiamo scritto molte cose molto
di cose intelligenti lungo la strada
abbiamo trovato la nostra chiave di partizione naturale noi
isolato un percorso di lettura da una strada giusta
abbiamo identificato il volume e l’accesso
modelli sia per la nostra lettura e scrittura
carica se fossero sequenziali o
casuale e abbiamo sviluppato una simpatia per
i materiali che stavano usando ma la maggior parte
importante non abbiamo mai dimenticato il nostro obiettivo di
consegnare un prodotto che ha preso a calci in culo
così abbiamo architettato per primo senza completamente
capire cosa è il nostro edificio
materiali sono stati perché abbiamo ipotizzato che
il nostro database nasconderà questo da
noi, quindi, se provi ad adattare i tuoi dati
modello al tuo database o se tu
scegli di adattare il tuo database ai tuoi dati
modello in definitiva il successo del tuo
design e la capacità di nascondere il tuo
l’ignoranza del pubblico è basata davvero
su quanto bene comprendi i materiali
con cui lavori, ecco fatto
grazie
Please follow and like us: