2015-05-12 17 views
9

Ho trovato Slick 3.0 ha introdotto una nuova funzionalità denominata streamingIn Slick 3.0, perché è utile il nuovo Streaming?

http://slick.typesafe.com/doc/3.0.0-RC1/database.html#streaming

io non sono a conoscenza Akka. streaming sembra un valore pigro o asincrono, ma non è molto chiaro per me capire perché è utile e quando sarà utile ..

Qualcuno ha idee a riguardo?

+1

probabilmente si dovrebbe leggere su Akka flussi come penso questo meccanismo nella slick è un buon modo per legare insieme i flussi di Slick e Akka. Con questo meccanismo, è possibile trattare una raccolta di risultati del database come sorgente di streaming e quindi inserirla in qualsiasi pipeline/grafico di elaborazione desiderati. Senza questo ponte, dovresti scrivere tu stesso quella parte, materializzando per prima cosa la raccolta in memoria che potrebbe non essere desiderata. – cmbaxter

risposta

11

così lascia immaginare il seguente caso d'uso:

A "SLOW" cliente vuole ottenere un grande insieme di dati dal server. Il client invia una richiesta al server che carica tutti i dati dal database, li archivia in memoria e quindi li passa al client.

E qui ci troviamo di fronte a problemi: il client gestisce i dati non così velocemente come volevamo => non possiamo rilasciare la memoria => questo potrebbe causare un errore di memoria insufficiente.

I flussi reattivi risolvono questo problema utilizzando backpressure. Possiamo avvolgere l'editore di Slick attorno al sorgente Akka e quindi "nutrirlo" con il cliente tramite Akka HTTP.

Il problema è che questa contropressione viene propagata tramite TCP tramite Akka HTTP fino al server di pubblicazione che rappresenta la query del database.

Ciò significa che leggiamo solo dal database alla velocità con cui il cliente può consumare i dati.

P.S Questo è solo un piccolo aspetto in cui è possibile applicare flussi reattivi.

È possibile trovare maggiori informazioni qui: