In Slick / Scala streamen

Ich schaue mir Scala / Slick-Streaming an und versuche zu verstehen, wie es funktioniert. Hier ist mein Testcode

    val bigdata = TableQuery[BigData] 
    val x = db.stream(bigdata.result.transactionally.withStatementParameters(fetchSize = 100)).foreach {
      (tuple: (Int, UUID)) =>
        println(tuple._1 + " " + tuple._2)
        Thread.sleep(50)//emulating slow consumer.
    }

    Await.result(x, 100000 seconds)

Während der Code ausgeführt wird, habe ich das postgresql-Abfrageprotokoll aktiviert, um zu verstehen, was unter der Haube läuft. Ich sehe alle 100 Elemente eine erneute Abfrage

2015-11-06 15:03:24 IST [24379-3] postgres @ scala_test LOG: Abruf von S_2 / C_3 ausführen: x2 auswählen. "Id", x2. "Data" von "bigdata" x2 2015-11- 06 15:03:29 IST [24379-4] postgres @ scala_test LOG: execute

fetch from S_2/C_3: select x2."id", x2."data" from "bigdata" x2
2015-11-06 15:03:34 IST [24379-5] postgres@scala_test LOG:  execute fetch from S_2/C_3: select x2."id", x2."data" from "bigdata" x2
2015-11-06 15:03:39 IST [24379-6] postgres@scala_test LOG:  execute fetch from S_2/C_3: select x2."id", x2."data" from "bigdata" x2
2015-11-06 15:03:44 IST [24379-7] postgres@scala_test LOG:  execute fetch from S_2/C_3: select x2."id", x2."data" from "bigdata" x2
2015-11-06 15:03:49 IST [24379-8] postgres@scala_test LOG:  execute fetch from S_2/C_3: select x2."id", x2."data" from "bigdata" x2

Es sieht jedoch so aus, als würde der gesamte Datensatz abgerufen. Ich habe eine Abfrage mit Offset erwartet.

ie SELECT * FROM bigdata  LIMIT 100 OFFSET 500

Sieht so aus, als ob alles abgefragt und Sendedaten teilweise gesendet werden.

Während das Streaming oben ausgeführt wird, habe ich einen neuen Datensatz in dieselbe Tabelle eingefügt.

Vor dem Streaming

SELECT count(*) FROM bigdata -> 500

Dann einige Zeilen eingefügt

SELECT count(*) FROM bigdata  -> 700

Aber das Streaming stoppt bei 500. Dies scheint darauf hinzudeuten, dass neue Daten niemals abgerufen und zurückgestreamt werden. Irgendwelche Ideen, wie Streaming in Slick funktioniert.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage