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
の設定を推奨します。