【发布时间】:2017-04-05 22:46:25
【问题描述】:
我刚刚开始使用reactivecouchbase 异步数据库驱动程序,但遇到了一些基本的设计问题。 在传统的方法中,我会通过限制与数据库的连接数来限制我对数据库施加的压力。但是,使用异步驱动程序,我可以用新的查询淹没数据库吗?
这变得很重要的一个例子如下。
假设我有两种不同的方式调用数据库。
我的函数调用 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?
我觉得我在这里缺乏理解,想理解这种决定。
【问题讨论】:
-
您确定可以调用
Flow.mapAsync并使用返回DBResponse而不是Future[DBResponse]的函数吗?根据Akka API doc,这应该是不可能的。
标签: scala couchbase akka-stream