我想弄清楚如何使用流畅的流媒体.我使用光滑3.0.0与postgres驱动程序
情况如下:服务器必须将客户端的数据序列分割成大小限制(以字节为单位).所以,我写了以下光滑的查询:
- val sequences = TableQuery[Sequences]
- def find(userId: Long,timestamp: Long) = sequences.filter(s ⇒ s.userId === userId && s.timestamp > timestamp).sortBy(_.timestamp.asc).result
- val seq = db.stream(find(0L,0L))
我将seq与akka-streams Source相结合,写了自定义PushPullStage,限制数据大小(以字节为单位),并在达到大小限制时完成上游.它的工作很好.问题是 – 当我查看postgres日志时,我会看到这样的查询
select * from sequence_id = 0和timestamp> 0 order by timestamp;
所以,乍看起来,它似乎是很多(而且不必要的)数据库查询,只在每个查询中使用几个字节.使用Slick进行流式传输的正确方法是什么,以最小化数据库查询并最大限度地利用每个查询中传输的数据?