Press "Enter" to skip to content

GOTO 2014 • Polyglot Data • Greg Young


quindi passeremo brevemente attraverso l’ evento
sourcing oggi e poi lo faremo
inizia a guardare un sacco di diversi
problemi e all’interno di questi problemi
inizieremo a vedere enormi quantità
di complessità accidentale escono
perché stiamo usando i modelli sbagliati e
allora torneremo attraverso che siamo
concentrarmi su come usiamo il giusto
modelli ora sono sicuro che tutti voi sapete che non lo so
attualmente vivo in America, ma io
sono americani e americani sono conosciuti
in tutto il mondo per la loro sottigliezza e
prenotare per favore non sentirti male
facendomi una domanda quando parlo io
non mi infastidirà più di tanto
ora prima di entrare nei dati poliglotta I
voglio passare attraverso una breve panoramica
di quale evento il sourcing è solo per il
persone che potrebbero non sapere quale evento
il sourcing è che questo discorso non riguarda l’ evento
sourcing ma tutti abbiamo bisogno di almeno
avere un certo livello di comprensione condivisa
ora è interessante per me sta andando e andando
intorno e guardando i problemi di business
quasi senza problemi di business che sono in
le industrie mature hanno il concetto di
CurrentState dentro di loro pensa
la finanza pensa alla contabilità pensa
sull’assicurazione non hanno il
concetto di stato attuale stato corrente
come concetto transitorio ciò che fanno è
memorizzano fatti che si verificano in punti
tempo quanti di voi hanno un conto in banca
pensi che il tuo equilibrio sia una colonna
un tavolo cosa succederebbe se lo fosse
così ora non siete d’accordo con la vostra banca su
quanti soldi ci sono nel tuo account e
hanno detto che la tavola onnipotente dice questo
quantità
quindi è corretto e tu vai ho bisogno
una nuova banca sa che il tuo bilancio è un
equazione il tuo saldo è una somma di
tutte le transazioni che si sono verificate
all’interno del tuo account potrei memorizzarlo
un tavolo ma non è niente di più
non è un Thorat la stessa cosa
vale per qualsiasi problema aziendale
che vogliamo guardare la maggior parte delle persone
oggi lavorano con modelli strutturali
e questa è stata la mia quintessenza
esempio di un modello strutturale in cui noi
avere un ordine di acquisto con n elementi pubblicitari
e informazioni sulla spedizione e questo potrebbe
essere un documento che potrebbe essere memorizzato
in un database sequel questo potrebbe essere un
File XML quanti di voi hanno lavorato
con un modello strutturale come questo prima
questo non è l’ unico modo di rappresentare
questa informazione posso anche rappresentare
questa informazione come una serie di eventi
quindi abbiamo carrello creato tre articoli
aggiunto e informazioni sulla spedizione ora
quei tre elementi aggiunti sono quelli
in realtà tre eventi ma se avessi fatto
tutti e tre gli eventi su questo fanno scorrere le scatole
ho davvero poco e non hai potuto leggere
loro più
Posso in qualsiasi momento prendere questi
cinque eventi e posso replicarli e io
può dare questo pezzo di struttura I
può sempre riprodurre questo insieme di eventi e
restituirti la struttura di cosa
in realtà rappresenta ma non lo memorizzo
la struttura che immagazzino la serie di
eventi e ci sono molti vantaggi a
memorizzare i fatti invece di archiviare il tuo
effetti della percezione questa è una percezione
dei fatti dati
la principale differenza che si inizia a trovare è
che nel tempo la tua percezione cambia
ora il vero motivo per cui quasi tutto il
le industrie mature stanno usando questo come
contrario a questo è perché questo non lo fa
perdere informazioni questo non mi interessa cosa
modello che scegli di perdere
informazione
come CTO avevo solo una regola per la mia azienda
non perderemmo alcun dato il motivo per cui noi
non perdere dati è perché l’ho avuto
nessun indizio matto su come valutarlo come fare
fai analisi costi-benefici se tu
non so come valutare alcuni dei
futuro stavamo conservando oltre 100
gigabyte al giorno di dati come questo e
questo era anni fa
questo modello è garantito per perdere
informazioni quanti di voi hanno un
aggiorna o cancella la dichiarazione nel tuo
sistema quanti di voi avevano un livello C.
incontro per parlare del valore di tale
dati in futuro così hai appena deciso
che questi dati sono inutili e lo faremo
solo sbarazzarsi di esso e un sacco di problemi
vieni da questo ora questa diapositiva mi ha portato
per sempre da trovare e il motivo per cui è
perché i contabili non lo fanno
la stessa cosa succede bene a forse a
Enron ma i ragionieri non gareggiano nel
medio il loro libro mastro quando parliamo
questi eventi fonte sistemi fonte di eventi
i sistemi sono append-only non c’è
concetto di cancellazione e non c’è
concetto di aggiornamento questo ha un lato positivo
effetto se dovessi passare e impostare
una cache HTTP su un evento cosa vorrei
impostalo per infinito tutti i nostri dati è
completamente immutabile e noi siamo un
modello solo append ora cosa può portare
per esempio potremmo dirlo adesso
abbiamo carrello creato tre articoli aggiunti
un articolo rimosso e quindi spedito
le informazioni a riguardo sono le stesse
come il carrello ha creato due articoli aggiunti di spedizione
informazioni a esso e vedo alcune persone
dire di sì e qualcuno che non dice nessuno
è fantastico perché è sempre così
una domanda confusa per le persone il
la risposta è dipende dalla tua prospettiva
se stavo usando questo modello e lo sono
proiettando questo modello dai due eventi
flussi che stanno per venire ed essere
la stessa cosa se facessi un
diverso modello se fosse così
fare un modello
mi direbbe quali oggetti sono stati rimossi
da un carrello finirebbero lo stesso
e questo è un bel trucco che puoi
giocare nei tuoi sistemi oggi, se tu
può trovare due insiemi di casi d’uso
lascia il tuo modello strutturale allo stesso modo
punto finale indovina ciò che hai appena dimostrato
stai perdendo dati qual è il valore di
i dati che hai appena perso a seconda
la mia prospettiva questi finiranno con
risultati diversi ora questo è meglio visto
con un caso d’uso e ho usato questo
usa il case per anni torniamo a questo
modella e immaginiamo dove amazon.com
e dicono di sapere quello che penso
persone che rimuovono i loro oggetti da
i loro carrelli entro sei minuti prima
del check-out penso che siano più
probabile comprare quell’oggetto in futuro
rispetto agli altri elementi che mostriamo loro
in base alle loro preferenze, perché quando lo fanno
rimuovi un articolo dal carrello sei
pochi minuti prima del check-out hai guardato
al tuo carrello e sarà come
trecentosettanta dollari e
siete come intenzione di mia moglie uccidermi I
non posso farlo ho bisogno di prendere due o
tre elementi fuori dal carrello non lo è
che non li voglio, sono solo
dare la priorità a loro inferiori rispetto agli altri
oggetti che erano all’interno del mio carrello così
cosa facciamo qui aggiungiamo una nuova cosa
chiamato elementi pubblicitari rimossi e poi noi
scrivi un rapporto che sembra rimosso
elementi pubblicitari e quindi annidato
sub-query per vedere se hai acquistato quell’oggetto
in futuro distribuirlo alla produzione
l’utente esegue il suo rapporto che cosa vede
niente di quello che funzionerà da questo
attimo in avanti facciamolo entrare
questo modello quindi quello che farò è su a
scrivi una proiezione ora dove parlo a
molto sulle proiezioni oggi proiezioni
potrebbe essere in memoria le proiezioni potrebbero andare
a un sequel le proiezioni del database potrebbero
andare alle proiezioni di neo4j potrebbe andare a
MongoDB Non che consiglio vivamente che
e cosa farà la proiezione
è cerca l’ oggetto rimosso e
dice che ora sto cercando questo oggetto
il futuro allora vede la spedizione
informazione che è l’equivalente di
la cassa e dice che era dentro
sei minuti è stato segnato
cercando questo
l’oggetto in futuro trovato è uguale a false
e poi mentre vado avanti in futuro
se trovo quell’oggetto nel carrello di qualcuno, io
segnato vero per trovato ora quello che non ho
ti ha detto che le proiezioni sono quando tu
eseguire una proiezione che deve sempre iniziare
sull’evento zero e fatti avanti così
andrà al primo evento questo
il sistema ha mai fatto e si fa avanti
tutta la strada fino ad adesso e poi
correrò nel futuro, quindi scriverò a
rapporto basato su quello stato di uscita cosa
il mio utente aziendale vede quando corre
quel rapporto vede il rapporto come se
è sempre stato nel sistema, infatti
può anche tornare indietro e può guardare
cosa avrebbe detto quel rapporto se
aveva quel rapporto il 14 luglio alle 2:13
e 22 secondi nel pomeriggio questo è
dove il valore reale dell’outsour degli eventi
proviene da questa capacità di guardare
alle cose con nuove prospettive e a
tornare indietro nel tempo e guardare la storia con
Prospettive che hai oggi in a
esempio del mondo reale immagina di essere in grado di farlo
prendi il tuo cervello come esiste oggi e
rimandalo indietro nel tempo a quando avevi 12 anni
anni al tuo primo ballo e tu
potrei percepire i fatti allora come te
capirli oggi è in realtà a
scenario davvero spaventoso non lo farei
consiglio di farlo , ci sono tutti i tipi di
cose fantastiche che possiamo fare perché noi
può muoversi avanti e indietro lungo
tempo possiamo aprire nuovi modi di guardare
al nostro problema e tutto torna a
che non stiamo perdendo nessuna informazione
e l’unica cosa che puoi fare
non perdere alcuna informazione è quello di memorizzare un
serie di eventi non c’è altro modello
questo lo farà qualunque altro modello tu scelga
perderà alcune informazioni è solo un
importa di quali informazioni sei
perdendo ora quanti di voi hanno sentito parlare
alcuni di questi prima di tutti questi
database meravigliosi sono tutti caldi
cose nuove se non sei forte, se lo sei
non li usa tranne uno di loro
quanti ne hai sentito quel sequel
morto nessuno userà mai il sequel di sempre
ancora
nuovo sequel nessun sequel che è il modo di
partire
Sì, certo che non c’è la migliore archiviazione ogni
database sul pianeta fa schifo a tutti
Uno solo di loro, se stiamo parlando
a proposito di neo4j perché ce n’è una coppia
ragazzi qui dentro se stiamo parlando
a proposito di Cassandra, se stiamo parlando
su Oracle, se stiamo parlando
negozio di eventi che tutti succhiano ogni singolo
uno di loro e tutti succhiano il loro
possiede modi unici quanti di voi ricordano
questo fa ricordare alla gente il no
movimento sequel oggi anni fa loro
ha detto che nessuno userà mai il sequel
di nuovo perché abbiamo queste nuove cose
chiamato oggetto database e oggetto
i database sono la cosa migliore di sempre
database di oggetti che Rock possiamo usare
yaja con la configurazione XML di primavera e
memorizza i nostri dati in XML e se non l’hai fatto
conoscere una lingua per convertire xml in
stack tracce se possiamo memorizzare i nostri dati in
XML lo renderemo ancora migliore
ma tutti hanno scoperto che queste cose
in realtà succhiare quando ho usato un oggetto
database dietro il mio modello di dominio quanti
di te ibernare prima di ibernare
Davvero brutto perché hai questo gigante
disadattamento di impedenza tra te e il tuo
database questi non hanno quell’impedenza
mancata corrispondenza quando vado a prendere un oggetto
camminare da un oggetto a un altro oggetto
che quella operazione ha fatto Big O di
uno all’interno di quel database di oggetti quindi
perché tutti hanno smesso di usarli come?
molti di voi usano oggi un database di oggetti
occasionalmente prenderò una mano in realtà
di solito lavorano in ambito finanziario
sistema molto del vecchio supporto
i sistemi finanziari sono ancora un oggetto
database perché hanno succhiato perché no
loro conquistano il mondo cosa è successo
le persone sarebbero passate e loro
costruire il loro modello di dominio in su in cima
il loro database di oggetti e tutto
sarebbe hunky-dory forse solo per esserlo
pronto per andare in produzione e poi quello
sarebbe venuto uno stupido uomo d’affari
e di ‘qualcosa come sai che ho bisogno di un
rapporto e quello che voglio è un rapporto che
prende tutte le vendite dal costo
Voglio arrotolarli per cliente e
allora voglio ottenere una media e
deviazione standard per loro
dimensione del biglietto e voglio ottenere il
somma totale di quanto sono stati
spendere ti piace suona come a
Gruppo di Acquisto o si potrebbe provare a farlo in
un database di oggetti e lo sarà
orribile è doloroso da fare per te
caricare 800 milioni di oggetti in memoria
e passare attraverso e fondamentalmente affrontare
Questo
e così tutti hanno detto di conoscere l’oggetto
i database fanno schifo non dovremmo mai usarli
cosa perfettamente razionale loro succhiano
a fare comportamenti OLAP quindi non lo faremo
usali più quando iniziamo a ricevere
in questo tipo di sistemi è
straordinariamente raro che un singolo dato
modello sarà effettivamente lavorare per fare
tutto ciò che vuoi fare e farlo
bene e possiamo passare attraverso un sacco di
esempi di dove la gente sceglie il torto
modelli e causa molti problemi
quanti ne hanno sentito parlare di questo piccolo
avvio così quando hanno iniziato ad andare te
ricorda la balena fallita che cos’è Twitter
al suo interno è un pub / sub di argomento basato su
Naturalmente non c’è arte anteriore dentro
questo problema e sono finiti
implementandolo in Ruby on Rails in cima
del mio sequel fino a quando ne hanno avuto centinaia e
centinaia di mie istanze sequel che puoi
sapere che hanno cambiato da allora
tutto questo, ma corse in
problemi perché il modello che loro
stavano cercando di usare sotto le cose
non era appropriato a quello che erano
provando a fare un altro esempio, abbiamo a
tabella ha un ID un ID genitore e
poi alcuni dati quanti ne hai
implementato questo prima di entrare, è possibile
ammettere che questo è per una barra dei menu e poi
lo spendi alla produzione e
la produzione torna da te e dice
perché questa relazione impiega nove minuti
per correre e, naturalmente, si dice che funziona bene
bene nella mia macchina cosa c’è di sbagliato
il tuo ambiente di produzione è bene
sbagliato con il loro ambiente di produzione
è quello invece di avere le 20 righe di
dati che hai avuto
Hanno una settantina cento e
migliaia di righe di dati e quello che hai
creato qui è noto come ricorsivo
domanda ora ragazzi siete tutti intelligenti
sviluppatori quindi immagino cosa hai fatto
il prossimo era questo dove ora vado
avere ID padre ID zero genitore ID uno
genitore ID due genitori ID tre e tu avresti
fare l’ ID genitore fino al
profondità che si desidera poter interrogare
perché in questo modo posso solo fare una query
e potrei dire dove l’ID del genitore è uguale
o ID principale uguale a zero o ID principale
uno uguale o genitore e quindi posso
riorganizzali nella memoria e fai il
la ricorsione in memoria è molto simile
ad un altro problema che ho visto ho visto
questo particolare problema almeno tre
o quattro volte negli ultimi sei mesi
con clienti reali molti di loro in
America, quindi quello che hanno qui è
loro hanno un tavolo per persona e un
la persona ha un nome o un tipo e io no
sai perché si chiama persona e c’è a
tipo società e non ne fa nessuno
senso e quindi hanno una relazione
tabella in cui hanno un ID di relazione
un ID di persona un ID di persona perché io sono
mappare due persone insieme e poi
hanno un tipo di relazione quanti
hanno implementato qualcosa di simile a
questo ora il problema di business che
stanno risolvendo stanno iniziando a dirti
so che ho Joe qui e voglio vedere
se questa persona è imparentata con Joe fino a
tre livelli basati su queste relazioni
tipi come possono essere un caregiver o un
genitore ma non possono essere uno zio quindi
mostrami se è vero o no
qual è il percorso più veloce per entrare
loro avevano circa dieci ingegneri
lavorando su questo problema per circa un anno
in realtà abbiamo risolto questo problema per loro e in
circa tre giorni quello che abbiamo fatto è stato noi
portato in questo database chiamato neo4j
è un database grafico questo è un grafico
problema che hanno implementato all’interno di
sequel e richiede query ricorsive
Erano circa mezzo milione
dollaro sequel server per supportare questi
domande che stavamo superando loro su a
il computer portatile
questo è comune e ho visto questo
problema succede
più e più volte ancora non lo sono
dirò che voi ragazzi siete incapaci
di scrivere un database grafico ma quanti
di voi hanno un dottorato in teoria dei grafi
nessuno ok, mi fido delle persone di neo4j
più ero in realtà divertente stavo facendo
questo discorso a Budapest dura circa due settimane
fa e ho posto questa domanda
in realtà un ragazzo nel pubblico è come lui
beh, in realtà ho un dottorato in grafico
teoria ed è un po ‘merda cosa
stiamo vedendo qui è che il torto
il modello causa enormi quantità di
complessità accidentale non stiamo parlando
come aggiungere 20 minuti o 30 minuti a
la tua giornata a causa del modello sbagliato
stiamo parlando di prendere le cose da un
un anno di 10 persone che lavorano per tre giorni
di due persone che lavorano tutto il resto lo è
massiccia accidentale complessità altro
esempi di questo possono essere visti quanti
ho visto il sequel server full-text
indicizzazione cosa pensi faccia meglio
lavoro che o leucina Liat Lucene lo fa saltare
fuori dall’acqua ma ci proviamo sempre
trovare una soluzione ai nostri problemi e
quello che vogliamo davvero fare è noi
voglio davvero separare e usare
più modelli all’interno dei nostri problemi
ora ho parlato di una forma di
questa separazione per molto molto tempo
tempo e questo è CQRS
comando e query responsabilità
segregazione perché le letture e le scritture sono
diverso dovremmo separare in base a
legge e scrive questo non è il primo
volta che ho parlato dell’evento che ha portato questo
è in realtà il secondo in cui lo credo
era esilarante perché non ero davvero
parlare più di tanto e non mi parlare
morì era molto giovane, allora intendo
stiamo parlando di sette anni
fa quindi ho 27 anni, no
ho parlato molto alle conferenze. Io esco
probabilmente avevo 20 tazze di caffè davanti
gente di fila non ho mai incontrato Martin Fowler
Gregor hope-a ed Eric Evans e io sono
parlerò di estendere il loro
lavoro penso di aver attraversato il mio intero
parla come 22
è e in seguito Eric si avvicina a me
ed è come se tu sapessi che era un brutto
parlo è come una merda, grazie Eric
lo apprezzo, ma legge e scrive
un modo in cui possiamo iniziare a distinguere
e separando ora per me sono le letture
la parte interessante dei sistemi scrive
sono davvero semplici e ne parleremo di più
su di loro ma se guardi di più
sistemi i modi interessanti che sei
sta per mettere i tuoi dati di cui parla
come vuoi leggere i tuoi dati non riguardo
come vuoi scrivere i tuoi dati e quando
guardiamo le letture di solito si legge
che ha bisogno di scalare non scrive, scommetto di più
di te potresti eseguire i tuoi diritti
sistema sul mio cellulare quanti di
fai più di 50 transazioni per
Secondo paio di mani, so che c’è molto
di finanza ragazzi qui quindi dovrei essere onesto
e dire che nei sistemi finanziari questo
è completamente indietro e ottieni un sacco
e molti diritti per pochissime letture
ma la maggior parte dei sistemi le letture sono ciò che io
ho bisogno di scalare e io vengo portato dentro per a
molti problemi di scalabilità e uno
cosa trovo sempre divertente sei tu e
guarda i loro problemi e i loro
i problemi stanno ridimensionando le loro letture
il loro seguito database ho scommesso la maggior parte di voi
sono da qualche parte tra uno e due ordini
di magnitudine più letture che diritti
la mia ipotesi è che molti di voi sono da qualche parte
tra il 90 e il 99 percento legge ora come
molti di voi hanno una terza forma normale
database o proprio intorno al terzo normale
questo è ciò che generalmente ti trovo
costruito un modello che è stato ottimizzato per
scrivendo e poi chiediti perché hai
problemi di ridimensionamento delle tue letture è il
stessa cosa di cui stavamo parlando prima
ma le letture sono quasi sempre le
aspetto interessante delle cose
i diritti non sono quasi mai interessanti se io
vai a guardare dentro neo4j se vado a guardare
all’interno del negozio di eventi se vado a guardare
all’interno della luce sequel se vado a guardare
dentro Cassandra sai cosa loro
tutto funziona allo stesso modo per scrivere così
fa oracle così troppo sequel server loro
aggiungere un log e poi internamente
dopo che si aggiungeranno a un registro andranno
e aggiorna qualunque cosa siano
sta per essere interrogato è se lo è
una b-tree è una tabella di stringhe memorizzata
tutti lavorano quasi identicamente ora
gli eventi di memorizzazione generali sono buoni
modello transazionale senza perdita, ecco cosa
il database è interno e puoi farlo
lo stesso all’interno del tuo codice, perché no
scrive solo memorizzare un evento che è cosa
stiamo parlando di tutto il ritorno
quando stiamo parlando di sourcing evento
Sto solo aggiungendo eventi a un log ora
legge e scrive sono una forma di
separazione di cui possiamo parlare ma
ci sono altre forme di separazione
esiste un’altra forma molto comune di
la separazione è il tempo che ci permetterà di
separare diversi modelli ora se io
andare in finanza questo è in realtà un
concetto di dominio è il concetto di
dati intraday rispetto ai dati inter day
oggi è trattato diversamente da qualsiasi
altro giorno nella storia dell’umanità e
questo è comune vedere quello che sono stato
vedere molto ultimamente è un grande multivariato
problemi che le persone stanno facendo
la grande mappa produce e quello che sono
trovando finirà per avere questo
massiccia lavoro MapReduce diciamo usando a
t Nodi extra large di Amazon e poi loro
fallo una volta al mese e sarà così
dare loro risposte perfette alle loro
problema multivariato ma ora il
gli affari vogliono ottenere che ogni giorno come
è il costo di rampa 80 Amazon
nodi extra large per un mese
è proibitivo ma cosa possiamo fare qui
siamo in grado di separare in base al tempo e
quello con cui normalmente andrai a finire
finirai con il grande Hadoop
diciamo il lavoro in batch e poi lo inseriremo
in un piccolo evento complesso di velocità minuscola
processore ora ciò che l’evento complesso
il processore sta facendo sta attraversando
sapendo cosa ha detto questa cosa e cosa
ti importa di più perché andiamo
dì che stai facendo delle offerte a causa di
quell’informazione e come sta andando
attraverso le sue sottili fette invalidanti di
il grosso problema e poi facendo poco
piccoli lavori MapReduce per cercare di finire
aggiornare solo una fetta molto sottile della
nel complesso lavoro MapReduce questo è molto molto
comune e si può ottenere l’obiettivo di
avendo quasi in tempo reale le informazioni
senza prendere la spesa di avere 80
Nodi di grandi dimensioni Amazon in esecuzione
costantemente questa è una forma veramente comune
di separazione dei modelli tra i dati
è più di un giorno contro i dati
questo è il momento che vedrai questi
le separazioni iniziano ad accadere tutte
tempo e quasi mai lo vuoi
avere un singolo modello, i modelli singoli lo faranno
causare problemi che hai sempre intenzione di
finiscono perché ogni database fa schifo
i suoi modi unici ora quando iniziamo
guardando come farlo molto
i problemi sorgono quanti ne hai provati
in esecuzione con due database nel tuo
dell’organizzazione prima sono andati fuori
sincronizzare cosa succede quando corro tre
modelli e tutti ti dicono tre
cose differenti
causa un grosso problema e questo è
tipicamente quello che finisce per accadere così
è il mio modo stereotipato che vedo
persone che cercano di implementare multipli
modelli nel loro sistema in modo sostanziale
hanno un cliente che sta rispondendo
a un dominio il dominio potrebbe essere supportato
da qualcosa come ibernare che parla con a
terzo normale modulo database il dominio
il modello pubblicherà quindi gli eventi su
questa cosa magica chiamato un autobus e il
il bus consegnerà quindi gli eventi a
le cose che saranno reattive
quindi potremmo scrivere in un database OLAP
possiamo scrivere in un database grafico che possiamo
guarda le cose da un’elaborazione del flusso
prospettiva questo è destinato a fallire
il modo in cui qualcuno ha mai visto qui
Il discorso di Martin Fowler sembra il mio autobus
grande in questo io consiglio vivamente
ma nella produzione di questa non sarà effettivamente
funziona bene, uno dei nostri primi problemi
fare con questo, quindi se il mio modello di dominio è
andando a scrivere in una terza forma normale
database e pubblicherà un
messaggio in un bus di cosa ha bisogno
bene cosa succede se vado a scrivere
il database e ho ottenuto un successo e
poi dico ora di pubblicare in coda ma
qualcuno mi stacca prima che io dica
così ora avremo bisogno di un
transazione distribuita di qualche tipo
stare lontano da transazioni distribuite
evitali come la piaga se puoi
ma è un problema più sinistro qui
sai che nessuno di voi vorrebbe inserire un bug
software ma hai junior sul tuo
squadra cosa succede se abbiamo un bug qui
diciamo che c’è un bug e nel
modello di dominio impostiamo lo stato come a
Connecticut hard-coded mentre prendiamo
qualunque cosa comandassero i nostri clienti era e
mettilo correttamente nell’evento per andare
via a tutti gli altri così ora questo
il database dice che è in Louisiana e così
il database dice che è nel Connecticut come si fa
tu gestisci questo è molto molto grande
problema ora diciamo questo
si è verificato come avrei rilevato
è successo come ti concilia
tra un database sequel su un grafico
database dovrebbe essere divertente, giusto
ciò che è giusto un copione di riconciliazione di
corso che è più probabile avere
capita che in realtà hai trovato un bug o
che hai un falso positivo perché
il tuo script di migrazione è rotto o dispiaciuto
il tuo script di riconciliazione è rotto
okay immaginiamo di averlo scoperto
che questo è successo come lo risolviamo
torniamo dal modello OLAP al
terzo modello di modulo normale e aprire a
transazione distribuita tramite link
server o qualcosa che abbiamo davvero
grosso problema qui ma c’è di più
problema sinistro e questo è quello che succede
quando provo a tirare fuori un nuovo modello e
abbiamo parlato di uno dei più belli
cose su sourcing di eventi e questo
tenere dei flussi di eventi è che io
può avere nuove percezioni che mi vengono in mente
con in qualsiasi momento e ho un
nuovo ora e voglio iniziare a dire
okay ho bisogno di recuperare tutti i miei eventi
quindi posso far apparire il mio nuovo modello come faccio
fallo con questo autobus nel mezzo, io
faccio che quello che sta succedendo qui è che ho
ho un sacco di segnali che dovrei inviare
un messaggio dal nuovo modello di nuovo finito
a qualcosa dall’altra parte per dire
hey ho bisogno che tu mi rinvii tutto il
eventi che non ho visto prima in altri
le parole ho bisogno di un canale di controllo molto
come un FTP puoi immaginare se i blog
lavoro come questo così sei venuto nel mio blog
e vuoi iscriverti quindi dico ok
bello se vuoi iscriverti al mio blog
mandami un’email creerò una coda
per te e poi ti mando un link al tuo
in coda e poi dici ma non lo faccio
voglio il post del blog in futuro che voglio
per ottenere il tuo blog storico anche
mi mandi un’altra email che dice che io
vuoi i tuoi post sul blog storico e poi
I post del blog storico nel tuo
in coda questo non suona molto scalabile
questo è in realtà un enorme problema ed è
una fonte di complessità accidentale che
le persone non vedono quando iniziano
costruendo questo e scoprono al
terminare una volta che sono andati in produzione e
è davvero difficile annullare questo
una volta che hai fatto questo è un equo
problema tipico ma ci sono altri modi
di trattare con questo particolare
situazione e al fine di pensare
loro abbiamo bisogno di pensare a come i blog
funziona davvero e se ho una coda qui
quello che abbiamo è conosciuto come un produttore
guidato abbonamento al produttore
ricorda lo stato dell’abbonamento
se stai seguendo il mio blog non è così
ha senso per me sapere lo stato di
il tuo abbonamento si mantiene lo stato di
il tuo abbonamento ti ricordi quanto lontano
in realtà sei venuto e quando tu
torna su, chiedimi qualcosa
dopo quel momento e ciò lo consente
per un sacco di cose interessanti a
capita qui così ora invece cosa siamo
sta per fare è che avremo un
client che sta parlando con un dominio e
dietro a quello stiamo solo per memorizzare tutto
dei nostri eventi e li esponiamo
loro su un protocollo diciamo Adam Adam
sarebbe perfetto per questo ora tutto
questi abbonati ricordano il loro
Stato non hanno code tutti
diciamo, ascolta un feed RSS di
gli eventi che stanno accadendo ora se
questo ragazzo ha bisogno di resettare e andare da
evento zero, quello che sta per fare è che lo è
solo andando a dimenticare il suo
informazioni sull’abbonamento e vai a tutto il
tornare all’inizio e dire oh I
Avrò 120 anni, ma dimenticalo
dammi i prossimi 20 eventi dopo
uno negativo ciascuno di questi controlli
il proprio abbonamento dall’altra parte
non abbiamo più due fonti di verità
non abbiamo gli eventi e il terzo
database di moduli normali abbiamo solo il
eventi a proposito se sto scrivendo a un
negozio di eventi e sto scrivendo a un evento
negozio ho bisogno di un distribuito
transazione ora perché sei solo
è scritto in un negozio a questo punto
un singolo locale
non c’è bisogno di essere distribuiti
transazione direttamente in quel negozio di eventi
è l’equivalente di fare una pubblicazione
è questo nella stessa operazione che è
salva e pubblica come parte dello stesso
operazione e questi sono tutti solo
seguendo il controllo puntando su ciò che è
disponibile oltre a quegli eventi ma dove
la vera bellezza di questo modello inizia
entrare in gioco è quando iniziamo a dire
a cui aggiungeremo un nuovo modello
questo prima quando eravamo di nuovo qui un nuovo
il modello avrà bisogno di parlare con
qualcosa dall’altra parte del pensiero
attraverso un canale di controllo per dire che voglio
a venire su e avviare l’invio di me nel corso
eventi dal modo in cui questo è sempre un
domanda interessante quindi se parlo
il canale di controllo per te a dirmelo
rispedire la mia intera storia e non c’è
attualmente cose che stanno accadendo
proprio adesso
li interponi nella mia storia?
li metti in cache fino a quando non hai finito
mandandomi la storia come facciamo noi
coordinare quando ottengo quei nuovi eventi
rispetto a quando erano i vecchi eventi
essere inviato attraverso ed è in realtà un
veramente problema davvero difficile ed è
richiede in generale che tu stia andando
andare fuori e costruire alcune infrastrutture
qui questo modello controlla il suo
abbonamento controlla il proprio stato
del suo abbonamento può semplicemente buttare
via quello stato inizia dall’evento zero
e vieni di nuovo avanti nel modo più semplice
pensare a questi protocolli è
immagina che ogni evento sia dato a
numero 0 1 2 3 4 5 quando salgo la prima volta
Dico dammi i prossimi tre eventi
dopo l’evento negativo 1, quindi ottengo 0 1 2
una volta che ho elaborato due mi ricordo di me
Ho salvato 2 e dico dammi il prossimo
3 eventi dopo 2 dal modo in cui mi sono schiantato
in questo momento così torno su, dico cosa c’è
l’ultima cosa che ho elaborato evento
il numero 2 mi dà i successivi 3 eventi dopo
evento numero 2 e cosa fa questo è
simula almeno una volta la messaggistica ora
puoi effettivamente simulare transazioni
inviare messaggi anche a questo se si memorizza
atomicamente il tuo punto di controllo con il
lavora tu
in realtà facendo ed è davvero bello
modo economico per essere in grado di simulare fare
questo tipo di flusso di lavoro qui questo è giusto
andando a soffiare via qualunque sia il suo stato
era se se voglio ripetere questo
qualcosa che dico, dimentica tutto
che hai visto prima e ricominciare
a quello negativo e vieni avanti c’è
nessun coordinamento che deve accadere
tra questi due andrà tutto bene
capita da questa parte e questo aiuterà
rimuovere molta complessità accidentale
all’interno di questi tipi di sistemi un altro
beneficio che possiamo avere qui potrei
avere due modelli OLAP identici
se iniziamo a vedere anche noi ci stiamo arrivando
molto carico sulle nostre persone modello OLAP
rapporti in esecuzione potrei appena generare un
la seconda proprio accanto ad essa e poi messa
un bilanciamento del carico di fronte a questi due come
a cui si ottiene la fornitura di query
che tutto quel modello si inserisce in uno
silo si e questo è molto spesso come noi
scala in questi tipi di sistemi ora e
dov’è la mia slide lì è
e questo dovrebbe essere un animato
jiff ma ho passato in PDF e
a quanto pare PDF non mi piace animato
gif molto di ciò che è è questo è un
percorso macchina Goldberg ed è un
nave animata è molto meglio è
effettivamente andando dappertutto e io
non voglio che la gente esca da qui
dicendo che Greg mi ha detto che dovremmo usare
dieci diversi database dovremmo usare a
database diverso per ogni problema
che abbiamo visto che la leucina è il
il migliore in assoluto nel fare C nel fare
indicizzazione full-text e tu sai che abbiamo
ha un problema di indicizzazione a tutto testo che noi
fai da queste parti dove la gente inizia a scrivere
in questa cosa e completiamo automaticamente
su di esso quindi abbiamo bisogno di prendere la leucina e noi
ho capito che in realtà abbiamo un grafico
nel nostro sistema sono i 28 elementi che
componi il nostro menu quindi dobbiamo portarlo
neo4j per gestire questo menu
non è quello che sto dicendo
quando parliamo di questo genere di cose
è necessario ricordare ci sono due lati
di questo l’altro lato di questo è
complessità accidentale e scusa
complessità operativa se per esempio
portando MongoDB a qualcuno nelle operazioni
ha bisogno di sapere che diavolo è MongoDB
hanno bisogno di sapere come configurare
MongoDB hanno bisogno di sapere come monitorare
MongoDB come fai un backup per
A MongoDB ci sarà bisogno di qualcuno
conoscere tutte queste informazioni al fine di
essere in grado di far funzionare le cose e
che ha anche un costo in termini di
la complessità dal punto di vista operativo I
NON sto dicendo che dovresti andartene e
ottenere un database personalizzato per ogni singolo
cosa che vuoi fare invece io sono
dicendo più capisco i compromessi
prenderà la complessità accidentale
perché stai scegliendo il modello sbagliato
se scelgo molti modelli che presento
complessità operativa la risposta si trova
da qualche parte nel mezzo ora se dovessi
vieni alla tua compagnia e tu dovevi
mostrami che hai un piccolo
problema di indicizzazione di testo completo e hai detto
sai che lo facciamo all’interno del sequel
assistente direi oh ok
meglio e poi se hai detto che sai e
lo facciamo all’interno del sequel server perché
stavamo cercando di portare la scena
e il costo di portare in Lucene da
un’operazione
la prospettiva era molto più alta e noi no
abbiamo davvero tanti dati che abbiamo solo
centomila file di dati che siamo
farlo comunque , basandosi sul
trade-off abbiamo deciso che lo faremmo
effettivamente uso sequel server indicizzazione I
non avrebbe assolutamente nessun problema con
quello è un consapevole informato
decisione se mi stai portando a
problema di prestazioni con full text come
ricerca a testo integrale all’interno di sequel
server e dovrei dire che hai te
considerato di usare qualcosa come noi
visto o elasticsearch sei andato Lu cosa
sarebbe un po ‘più un problema se
stiamo tornando e stiamo guardando a
sistema che è costruito in questo modo e quando
Ho citato un database grafico che vai oh
quello che dobbiamo davvero essere
entrare e comprendere tutti i
diversi tipi di database sono tutti
prezioso e fanno tutti schifo se si utilizza
loro nei posti giusti tutto lo farà
funziona bene se li usi nel torto
posti che farà veramente schifo operativo
la complessità deve essere presa in
considerazione quando guardiamo a ciò che facciamo
non solo dire che ci metteremo dentro
un database personalizzato per ogni singola cosa
che vuoi fare ma capirlo
puoi inserire un database personalizzato per
tutto ciò che vuoi fare io
normalmente nei sistemi vedrà almeno
tre modelli di solito vedrò qualcosa
di un negozio di documenti con valore chiave per l’ archivio
rappresenta i dati appena mostrati
eseguire il backup su schermi
Voglio un accesso rapido a questa query
in grado di mostrarlo molto rapidamente sul tutorial
l’utente su uno schermo normalmente sta andando
essere un tipo di ricerca all’interno di
questi sistemi e quasi sempre c’è
finirà per essere un sistema OLAP
che le persone usano per riferire quasi
finirà per vedere ogni sistema che vedo
su questi tre grafici ce ne sono un altro
davvero comune che vedremo iniziare
entrando nell’elaborazione dell’evento problema
è un altro comune che inizieremo a vedere
nel problema, ma tieni presente che
c’è una rovina di questo che è
complessità operativa che NON sto dicendo
tutti per andarsene e prenderne dieci
database e metterli in produzione
capire vi sono costi sebbene
sia giusto il costo di correre dieci altri
i database saranno probabilmente più economici di
un Isum Oracle
ora alcuni take away solo aggiungendo ad un
journal è davvero un buon modello per
sedersi dietro le scritture all’interno del tuo
sistema questo è ciò che il tuo database più
probabilmente lo fa internamente comunque è solo
scrivere su un log delle transazioni e poi
si sta spegnendo internamente questo e
aggiornando le sue strutture interne non c’è
assolutamente niente di sbagliato con te solo
dicendo sai quello che sto per farlo
e poi ne darò la possibilità
altri database per leggere lo stesso
diario che sto scrivendo assolutamente
niente di sbagliato nel farlo e con il
modo in cui puoi ottenere che questo sia veramente
gestione veramente veloce di decine di migliaia
di transazioni al secondo è assolutamente
nessun problema a farlo è relativamente
facile da raggiungere e non sto parlando
come schede fusion-io o qualcosa di simile
che in una lavagna di fusione ho effettivamente
li ho visti alzarsi oltre mezzo milione
questo registro delle transazioni può essere eventi e
questo tipo ci riporta all’idea
dell’eventualità di sourcing l’ idea generale è mia
il libro dei record è questo registro degli eventi
che sto scrivendo la mia operazione di una scrittura
è solo per aggiungere un evento a un log e
quindi sono considerato fatto questa append
solo i dati immutabili funzionano davvero davvero
bene per molti sistemi quanti di
hai bisogno di comunicare qualcosa
prima dell’interfaccia utente potrei anche la mia interfaccia utente
ascolta anche uno di questi feed atomici
che stavamo rappresentando eventi finiti
loro e mettere l’aggiornamento dicendo a proposito
anche questa persona sta guardando questi dati
o aggiornato è relativamente facile da fare
e avere questo modello di eventi lo fa
CQRS relativamente semplice è un modo di
trovare diversi modelli così dicendo che sono
avrò i miei diritti su questo lato del mio
legge dall’altra parte, ma non è il
unica forma di poter segregare
Modelli
e se c’è una sola cosa che voglio
tutti quelli che devono andarsene sono quelli
ogni database nel mondo
fa schifo a ognuno di loro
non importa quale sia il modello di esso
ci sono problemi che farà schifo
neo4j I love neo4j prova a fare un set
operazione in neo4j e ti renderai conto
che fa schifo
Amo il seguito provare a creare un grafico in
sequel e ti renderai conto di quel sequel
succhia
Adoro il tour degli eventi per provare a fare una query
come mi piacerebbe vedere tutti i clienti
il cui nome inizia con la lettera
G e ti sei reso conto che fa schifo perché
perché dovremo replicare ogni
evento all’interno del tuo sistema da parte di tutti
tempo per darti una risposta
quella domanda è assolutamente
terribile database terribile che dovresti
mai usare nessuno di loro ora capisce il
diversi modelli escono e iniziano
verificando tutti questi diversi
database cosa sono bravi in ciò che sono
che male database degli oggetti non sono
merda hanno i loro usi e c’è
alcuni tipi di problemi che tutti
questi sistemi faranno straordinariamente
bene e ci sono alcuni tipi di
problemi che faranno tutti
straordinariamente male e ricorda
l’altro lato di questo con operativo
complessità che non vuoi solo portare
in dieci database e diciamo di sì
abbiamo finito ci sono dei compromessi per questo
così ora con quello ti ringrazierò
per uscire

Please follow and like us: