Q: クエリの結果を非同期でストリーミングする方法はありますか?
A: ストリーミングAPIをサポートしています。
ストリーミング処理はstreamメソッドを使用して行うことができます。これによって戻り値はFs2のStreamになります。
val stream: fs2.Stream[DBIO, String] = sql"SELECT * FROM `table`".query[String].stream
MySQLではUseCursorFetchの設定によってストリーミングの動作が大きく変わります:
- UseCursorFetch=true: サーバーサイドカーソルを使用して真のストリーミング処理
- UseCursorFetch=false: 制限されたストリーミング処理(メモリ制約あり)
大量データを扱う場合はUseCursorFetch=trueの設定を推奨します。