2015-05-12 11 views
9

znalazłem Slick 3.0 wprowadzono nową funkcję o nazwie streamingW Slick 3.0, dlaczego nowo wprowadzone `Streaming` jest użyteczne?

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

Nie jestem zaznajomiony z Akka. streaming wydaje się leniwą lub asynchroniczną wartością, ale nie jest dla mnie jasne, aby zrozumieć, dlaczego jest przydatna, a kiedy będzie przydatna ..

Czy ktoś ma pomysły na ten temat?

+1

Należy prawdopodobnie przeczytać na Akka strumieni, jak myślę, że ten mechanizm w śliskim jest dobry sposób na połączenie strumieni Slick i Akka. Za pomocą tego mechanizmu można traktować zbiór wyników w bazie danych jako źródło strumieniowe, a następnie przesłać je do dowolnego potoku przetwarzania/wykresu, który chcesz. Bez tego mostu musiałbyś sam napisać tę część, w pełni materializując najpierw kolekcję do pamięci, która może nie być pożądana. – cmbaxter

Odpowiedz

11

Więc pozwala wyobrazić następujący przypadek użycia:

A „Slow” klient chce uzyskać duży zbiór danych z serwera. Klient wysyła żądanie do serwera, który ładuje wszystkie dane z bazy danych, przechowuje je w pamięci, a następnie przekazuje do klienta.

I tutaj mamy do czynienia z problemami: Klient obsługuje dane nie tak szybko, jak chcieliśmy => nie możemy zwolnić pamięci => może to spowodować błąd braku pamięci.

Strumienie reaktywne rozwiązują ten problem, używając backpressure. Możemy owinąć wydawcę Slicka wokół źródła Akka, a następnie "nakarmić" go klientowi poprzez Akka HTTP.

Chodzi o to, że to przeciwciśnienie jest propagowane za pośrednictwem protokołu TCP przez HTTP Akka w dół do wydawcy, który reprezentuje kwerendę bazy danych.

Oznacza to, że odczytujemy tylko z bazy danych tak szybko, jak klient może pobierać dane.

P.S To tylko mały aspekt, w którym można zastosować strumienie reaktywne.

można znaleźć więcej informacji tutaj:

Powiązane problemy