방금 reactivecouchbase 비동기 데이터베이스 드라이버를 사용하기 시작했지만 기본적인 디자인 문제가 발생합니다. 전통적인 접근 방법에서는 연결 수를 제한하여 데이터베이스에 가하는 압력을 제한합니다. 그러나 비동기 드라이버를 사용하면 데이터베이스를 새로운 쿼리로 늪에 잠길 수 있습니까?akka-streams 맵에서 비동기 드라이버를 사용하는 방법 mapAsync
이것은 중요한 예가 다음과 같습니다.
두 가지 다른 방법으로 데이터베이스를 호출 할 수 있습니다.
내 기능은 DB 호출 :
asyncCallDB: Future[DBResponse]
blockingCallDB: DBResponse
지금 나는 두 개의 서로 다른 기능을 사용할 수있는 스트림을 통해 DB를 호출을 매핑 할 : 이제
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?
나는 여기에 부족한 부분이 있으며 아래에 있다고 생각합니다. 이런 종류의 사퇴를 명심하십시오.
[맵과 mapAsync의 차이점] (0120-385-333) –
'Flow.mapAsync'를 함수는'Future [DBResponse]'대신'DBResponse'를 반환합니까? [Akka API doc] (http://doc.akka.io/api/akka/2.4/index.html#[email protected]%5BT%5D (병렬 처리 : Int) (f : 출력 => scala.concurrent.Future % 5BT % 5D) : FlowOps.this.Repr % 5BT % 5D) 이것은 불가능합니다. –