簡體   English   中英

在期貨中套上光滑的查詢

[英]Wrap Slick queries in Futures

我正在嘗試使用Slick異步查詢MySQL數據庫。 下面的代碼模板(最初用於查詢我的90k行中的內容)似乎在工作,但該程序消耗了數GB的RAM,並且在大約200次查詢后失敗而沒有警告。

import scala.slick.jdbc.{StaticQuery => Q}
def doQuery(): Future[List[String]] = future {
  val q = "select name from person"
  db withSession {
    Q.query[String](q).list
  }
}

我嘗試使用fromURL方法和c3p0連接池來建立連接。 我的問題是:這是對數據庫進行異步調用的方法嗎?

異步仍然是Slick未解決問題

您可以嘗試使用Iterables並流式傳輸數據,而不是使用類似於以下的解決方案將其存儲在內存中: 將SQL ResultSet像Scala流一樣對待

盡管請最后省略.toStream調用。 它將數據緩存在內存中,而Iterable不會。

如果您想要異步的iterable版本,可以查看Observables

事實證明,這不是問題(實際上是我的代碼中的錯誤,它為每個查詢打開了一個新的數據庫連接)。 根據我的經驗,你可以用如上圖所示,在期貨的數據庫查詢,后來與撰寫他們的Scala異步的Rx ,如圖所示這里 為了獲得良好的性能,所有這些都需要一個大的線程池(在我的情況下為x2 CPU)和一個同樣大的連接池。

Slick 3(Reactive Slick)似乎可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM