我剛開始使用異步數據庫驅動程序reactivecouchbase,但遇到了一些基本的設計問題。 在傳統的方法中,我會通過限制連接數來限制數據庫施加的壓力。然而,使用異步驅動程序,我可以用新的查詢來淹沒數據庫?如何在akka流地圖中使用異步驅動程序vs mapAsync
如果這已成爲重要的是在一個例子如下。
可以說我有兩種不同的方式調用數據庫。
我的函數調用DB:
asyncCallDB: Future[DBResponse]
blockingCallDB: DBResponse
現在我想分貝呼籲過流,我可以使用兩種不同的功能映射:
Flow.map()
Flow.mapAsync(numberOfConcurrentCalls)()
現在我的問題是你會如何選擇調用數據庫:
Flow.map(blockingCallDB) //One call at a time with back preassure
Flow.map(asyncCallDB) //Unlimited calls floods db no back pressure?
Flow.mapAsync(numberOfConcurrentCalls)(blockingCallDB) //Up to numberOfConcurrentCalls at the same time with back pressure
Flow.mapAsync(numberOfConcurrentCalls)(asyncCallDB) //Unlimited calls floods db no back pressure?
我覺得我understading缺少這裏,想下適應這種類型的決定。
[地圖和mapAsync之間的差異]的可能重複(http://stackoverflow.com/questions/35146418/difference-between-map-and-mapasync) –
你確定你可以調用'Flow.mapAsync'函數返回'DBResponse'而不是'Future [DBResponse]'?根據[Akka API doc](http://doc.akka.io/api/akka/2.4/index.html#[email protected]%5BT%5D(parallelism:Int)(f:Out => scala.concurrent.Future%5BT%5D):FlowOps.this.Repr%5BT%5D)這應該是不可能的。 –