后台更新数据方案

阿邹
• 阅读 1251

当你遇到一些让你大吃一惊的解决方案的时候你不要惊讶,要学会低头去面试它,解决它。

最近公司项目要做个人脸识别,类似于门禁卡之类的。本来这也没什么,因为我接到任务后第一反应是这样的逻辑: 设备采集图片 --> 设备识别图片是否是人脸 --是人脸> 提交服务器进行身份识别 -> 服务器返回人物身份信息 我觉得这样的逻辑就是有点耗时。 然后根据公司需求是要做百度人脸的本地离线识别,也就是我要把服务器所有的人脸数据都放到本地来。enenen 当时头还是有点大的。 这种方案其实我个人来说是不太赞同的(哈哈哈 主要我懒) 怎么说呢?

如果你用户有一万个 等我同步一万个数据吗 数据更新的及时性

那么我公司的思路是俩个接口解决,第一个接口是获取所有用户数据,第二个是返回更新的数据。 enenen,我又要吐槽了。这个返回更新数据只有一次有效性。然后也没有回调。这样子就会存在问题。

虽然服务器返回的数据都做了验证,但是谁也不能确保这次的数据就更新成功了。好歹也给回调接口回调一下成功与否。

然后言归正传,设备端就是定时任务去请求同步本地数据,对没错就是定时任务。是不是有种当初第一次写通讯的时候的感觉,还不知道webscket是什么。 然后现在请求就跟麻烦,因为我这边请求完图片还要转bitmap,然后转字节,然后提取特征,然后入库。一条数据下来要个五六秒。 有点炸毛,不要说开服务,开线程。 我们要确保前台在识别的时候后台释放百度的人脸识别资源,给予最大程度的宽容。 所有我们要做的事情就是这样的 第一 保证循环的同步性,里面有许多异步操作,我们要保证数据一条条的走下去,不要给程序太大压力,我这设备配置也不高。 第二 保证我们能尽快的打断更新让出资源给前台使用 第三 在恢复以后我们要保证和断点续传一样接着刚才的走 真苦逼。。。。

直接说解决方案把,一把辛酸泪。

利用rxjava来解决异步问题 利用一段空代码来解决等待问题 利用标志位来控制是否让出资源 然后网络请求请用自调的,意思就是当访问失败的时候自调一次,更新完成是时候自调一次。

 //空跑
 private void LoadRunTime() throws InterruptedException {
        while (!is) {
            Thread.sleep(1000);
        }
    }
 private void UPnext() {
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                for (int i = 0; i < dataBeans.size(); i++) {
                    LoadRunTime();
                    ...
                    emitter.onNext(i);
                }
                emitter.onNext(-1);
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) {
                        if (integer == -1) {
                            initLicense(MyApplication.getApplication(), new FinishMethod() {
                                @Override
                                public void finish() {
                                    ...
                                    System.out.println("更新完成");
                                }
                            });
                        }
                    }
                });
    }

综上,这种要本地识别的情况还是建议用长连接的解决方案把,挂后台跑浪费性能,而且数据及时性太差,而且如果一次更新太多对程序来说也是压力。

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
1年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
高性能API网关Kong介绍
本文关键词:高性能、API网关、Kong、微服务1.Introduction是随着微服务(Microservice)概念兴起的一种架构模式。原本一个庞大的单体应用(Allinone)业务系统被拆分成许多微服务(Microservice)系统进行独立的维护和部署,服务拆分带来的变化是API的规模成倍增长,API的管理难度也在日益增加,使用API网关发布和管
SPDK对接Ceph性能优化
关键词:SPDK、NVMeOF、Ceph、CPU负载均衡SPDK是intel公司主导开发的一套存储高性能开发套件,提供了一组工具和库,用于编写高性能、可扩展和用户态存储应用。它通过使用一些关键技术实现了高性能:1.将所有必需的驱动程序移到用户空间,以避免系统调用并且支持零拷贝访问2.IO的完成通过轮询硬件而不是依赖中断,以降低时延3.使用消息传递,以避免IO
3A网络 3A网络
5个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
5个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习
不是海碗 不是海碗
2星期前
人脸检测之身份识别你需要的那些事
人脸检测是进行身份识别的一个重要环节,因为它可以准确地识别出图像中的人脸,这样才能保证身份识别的准确性。
天翼云高可用虚拟IP(HAVIP)实践
(一)产品概述天翼云高可用虚拟IP(HighAvailabilityVirtualIPAddress,简称HAVIP)是一种可用独立创建和删除的私有网络IP地址资源。通过在VIPCIDR中申请一个私有网络IP地址,然后与高可用软件(如高可用软件Keepalived)配合使用,可用在VPC中搭建高可用的主备集群服务,提高VPC中服务的可用性。限制和说明
一个关于SDWAN单臂部署方案验证的实验
假设有这样一张网络,其中RTA和PCA表示某公司的A分支,通过中国电信CT路由器接入互联网ISP;RTB和PCB表示某公司的B分支,通过中国联通CU路由器接入互联网ISP。DNS(8.8.8.8)表示某互联网应用。为实现A分支私网192.168.2.0/24和B分支私网192.168.3.0/24的互通,现计划使用某厂商的SDWAN方案进打通两个内网,像下图