返回主站|会员中心|保存桌面|手机浏览
普通会员

百大专升本

结婚礼物,生日礼物,祝寿礼物,订婚礼物,高升祝贺送礼,喜得贵子祝贺送礼,感恩...

新闻分类
  • 暂无分类
站内搜索
 
友情链接
  • 暂无链接
首页 > 新闻中心 > Reactive-MongoDB异步Java Driver解读
新闻中心
Reactive-MongoDB异步Java Driver解读
发布时间:2020-11-17        浏览次数:0        返回列表

  从3.0 版本开始,MongoDB 开始提供异步方式的驱动(Java Async Driver),这为应用提供了一种更高性能的选择。

  但实质上,使用同步驱动(Java Sync Driver)的项目也不在少数,或许是因为先入为主的原因(同步Driver的文档说明更加的完善),又或者是为了兼容旧的 MongoDB 版本。

  响应式(Reactive)是一种异步的、面向数据流的开发方式,最早是来自于平台上的 Reactive Extensions 库,随后被扩展为各种编程语言的实现。

  及时响应(Responsive):系统能及时的响应请求。 有韧性(Resilient):系统在出现异常时仍然可以响应,即支持容错。武汉百木商业有限公司, 有弹性(Elastic):在不同的负载下,系统可弹性伸缩来保证运行。 消息驱动(Message Driven):不同组件之间使用异步消息传递来进行交互,并确保松耦合及相互隔离。

  在响应式宣言的所定义的这些系统特征中,无一不与响应式的流有若干的关系,于是乎就有了 2013年发起的 响应式流规范(Reactive Stream Specification)。

  具有处理无限数量的元素的能力,即允许流永不结束 按序处理 异步地传递元素 实现非阻塞的负压(back-pressure)

  当订阅成功后,可以使用 Subscription 的 request(long n) 方法来请求发布者发布 n 条数据。发布者可能产生3种不同的消息通知,分别对应 Subscriber 的另外3个回调方法。

  在上述3种通知中,错误通知和结束通知都是终结通知,也就是在终结通知之后,不会再有其他通知产生。

  Subscription 表示的是一个订阅关系。除了之前提到的 request 方法之外,还有 cancel 方法用来取消订阅。需要注意的是,在 cancel 方法调用之后,发布者仍然有可能继续发布通知。但订阅最终会被取消。

  而且,在返回 Publisher 对象时,此时并没有产生真正的数据库IO请求。真正发起请求需要通过调用 Subscription.request()方法。

  尽管这种实现方式是纯异步的,但在使用上比较繁琐。试想如果对于每个数据库操作都要完成一个Subscriber 逻辑,那么开发的工作量是巨大的。

  使用 List 容器对请求结果进行缓存 实现阻塞等待结果的方法,可指定超时时间 捕获异常,在等待结果时抛出

  当然,这个例子还有可以继续完善,比如使用 List 作为缓存,则要考虑数据量的问题,避免将全部(或超量) 的文档一次性转入内存。

  华为技术专家,多年互联网研发/架设经验,关注NOSQL 中间件高可用及弹性扩展,在分布式系统架构性能优化方面有丰富的实践经验,目前从事物联网平台研发工作,致力于打造大容量高可用的物联网服务。