当前位置: 首页 > news >正文

面试题:海量PDF的OCR处理思路

在这里插入图片描述

关键点:

  • 1000wPDF:数据量非常大。
  • 3天处理完:有时间限制。
  • 一篇PDF1~10s:可能需要以最高10s去做计算,这样时间才能保证留有富余。
  • 要求资源最大化利用:也就是尽可能节省服务器资源,能复用尽量复用,包括应用服务器和OSS服务资源。
  • 服务器都是阿里云的:可以假设都在同一个机房,忽略网络I/O时长损耗,这样可以用本地耗时作为计算的依据。

时间计算:

  • 假如一篇PDF处理10s,三天一台机器处理32460*6=25920(份)PDF。
  • 假如一篇PDF处理1s,三天一台机器处理32460*60=259200(份)PDF。

也就是一台机器三天处理量最多259200,最少处理25920份。那么1000w最多需要10000000/25920 ≈ 386台机器,最少需要39台机器。

优化思路:
思路一:动态缩容,先以386台机器并行处理,假设第一天处理数据量超过三分之一,此时计算剩余待处理量按10s算需要多少台机器,理论上所需机器数N<=386。机器数可减少到N台,再过一天后再次计算所需机器数newN<=386,机器数再次缩减到386台。也就是我们将时间段分成了3份,因为一篇PDF处理时长1~10s,所以每次一定是可以缩减0-N台服务器。这个分段可以更细到9段、24段、72段等,这样可以更多地缩减服务器数量。
思路二:多线程,鉴于现在一台服务器一般情况下是多核的CPU,所以可以充分利用多线程的优势。使用线程池可以更好地避免线程的创建和销毁的损耗,这里的处理程序可以使用线程池来进行相应处理。线程数建议按CPU核心数 *(1+平均等待时间/平均工作时间)计算。
思路三:分布式任务调度,由于有多线程+多实例,所以需要有一个高效的分布式调度组件来进行任务分配,避免资源的竞争和任务失败重试等。这个可以使用一些分布式任务调度框架,如XXL-JOB,基于自己的业务属性自主开发一个任务调度平台。或者可以使用消息中间件的方式进行任务的生产+消费,消息中间件消费一般是自带多线程的。

http://www.lryc.cn/news/248685.html

相关文章:

  • [原创][2]探究C#多线程开发细节-“线程的无顺序性“
  • 【精选】Spring整合MyBatis,Junit 及Spring 事务Spring AOP面向切面详解
  • 获取Spring容器Bean工具类
  • 图面试专题
  • VUE的计算属性
  • uniapp中使用pageScrollTo让页面滚动到固定节点或距离
  • 使用机器学习方法进行分析和处理:对高质量图像进行压缩
  • 多线程面试总结
  • android11-隐藏状态栏和导航栏
  • 血的教训--kail系统免密centos7的坑【高版本ssh免密低版本ssh的坑】
  • javaagent字节码增强浅尝
  • 计算机组成原理-Cache替换算法
  • Adobe 家族系列download
  • 97.STL-查找算法 find
  • 如何应对雨天飞行的挑战?无人机机库防护能力解析
  • 机器学习笔记 - 3D数据的常见表示方式
  • 【Node.js】解决npm报错:RequestError: unable to verify the first certificate
  • 语言模型文本处理基石:Tokenizer简明概述
  • 淘宝商品详情数据接口(店铺搬家、数据分析、代购商城、ERP选品、无货源铺货、品牌监控)
  • 面试篇之微服务(一)
  • 智慧科研助力科研数据的分析处理
  • el-select实现分屏效果
  • 微信小程序本地和真机调试文件上传成功但体验版不成功
  • windows系统用nginx部署web应用
  • 如何利用Python进行数据归一化?
  • Linux 基本语句_13_消息队列
  • Maven——仓库
  • Pandas:一个实用高效的Python数据处理库
  • Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想
  • DDoS高防IP到底是什么?