2015-05-12 11 views
9

Ich fand Slick 3.0 ein neues Feature streamingIn Slick 3.0, warum ist das neu eingeführte `Streaming` nützlich?

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

Ich bin nicht vertraut mit Akka genannt eingeführt. streaming scheint ein fauler oder async Wert, aber es ist nicht sehr klar für mich zu verstehen, warum es nützlich ist, und wann wird es nützlich sein ..

Hat jemand Ideen dazu?

+1

Sie wahrscheinlich auf Akka lesen sollte ströme wie ich dieser Mechanismus denken in Slick ist eine gute Möglichkeit, Slick- und Akka-Streams miteinander zu verbinden. Mit diesem Mechanismus können Sie eine Datenbankergebniserfassung als Stream-Quelle behandeln und diese dann in die gewünschte Verarbeitungspipeline/das gewünschte Diagramm einspeisen. Ohne diese Brücke müßten Sie diesen Teil selbst schreiben und die Sammlung vollständig in den Speicher bringen, was vielleicht nicht erwünscht ist. – cmbaxter

Antwort

11

So können Sie den folgenden Anwendungsfall vorstellen:

A „langsam“ Kunde will eine große Datenmenge vom Server erhalten. Der Client sendet eine Anfrage an den Server, der alle Daten aus der Datenbank lädt, speichert sie im Speicher und gibt sie dann an den Client weiter.

Und hier sind wir mit Problemen konfrontiert: Der Client behandelt die Daten nicht so schnell, wie wir wollten => wir können den Speicher nicht freigeben => dies kann zu einem nicht ausreichenden Speicherfehler führen.

Reaktive Streams lösen dieses Problem mit backpressure. Wir können den Slick-Publisher um die Akka-Quelle wickeln und sie dann über Akka HTTP an den Client "füttern".

Die Sache ist, dass dieser Gegendruck über TCP über Akka HTTP auf den Herausgeber weitergeleitet wird, der die Datenbankabfrage darstellt.

Das bedeutet, dass wir nur so schnell aus der Datenbank lesen, wie der Client die Daten konsumieren kann.

P.S Dies ist nur ein kleiner Aspekt, wo reaktive Ströme angewendet werden können.

Sie können mehr Informationen finden Sie hier:

Verwandte Themen