数据标注系统 - 图片标注进度

进度设计

想要达到的效果

在这里插入图片描述

第一版进度设计

标注结果表

CREATE TABLE `data_result_580187` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `res` int(11) NOT NULL COMMENT '对应数据版本记录ID',
  `vindex` int(11) NOT NULL COMMENT '文件序号',
  `pindex` int(11) NOT NULL COMMENT '图片序号',
  `width` int(11) NOT NULL COMMENT '图片宽度',
  `height` int(11) NOT NULL COMMENT '图片高度',
  `image_key` varchar(255) NOT NULL COMMENT '资源标识符',
  `token` varchar(511) NOT NULL COMMENT '资源访问标识',
  `result` mediumtext COMMENT '结果',
  `secondary` int(11) DEFAULT '0' COMMENT '归属乙方ID',
  `batch_index` int(11) DEFAULT '0' COMMENT '批次ID',
  `cur_proc` int(11) DEFAULT '0' COMMENT '当前流程ID',
  `proc_cnt` int(11) DEFAULT '0' COMMENT '流程轮数',
  `step` int(11) DEFAULT '0' COMMENT '实际流程ID',
  `handler` int(11) DEFAULT '0' COMMENT '流程操作人',
  `status` tinyint(3) DEFAULT '0' COMMENT '流程数据状态',
  `update_time` int(11) NOT NULL COMMENT '更新时间',
  `ext` varchar(1024) DEFAULT '' COMMENT '添加附加信息',
  PRIMARY KEY (`id`),
  KEY `res_data_index` (`res`,`cur_proc`,`status`),
  KEY `res_vidx_pidx` (`res`,`vindex`,`pindex`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

data_result_580187存储的每个阶段图片的标注结果,cur_proc一共有0,1,2,99四个值,分别代表标注、质检、抽查、验收四个阶段,status标识该图片在该阶段有没有完成,于是第一版设计是基于的sql统计

原始进度查询语句

SELECT COUNT(DISTINCT(image_key)) as total FROM `$table` WHERE res=$res AND 
        (
             (cur_proc =$seq AND status IN (1,2) and secondary=$secondary ) 
              OR (cur_proc =$seq AND status =0 AND handler>0 and secondary in (0,$secondary) ) 
              OR (cur_proc>$seq AND status in (0,1,2)) 
              OR (status =2 ) 
        )

问题

当列表的数据多,并且每个数据id的图片量很大的时候,实时的执行sql效率非常低,而且result表的image_key、cur_proc的标识度很低,索引基本上不起作用

第二版进度设计

针对第一版的出现问题的,我们优化出了第二版,即使用redis 的bitmap来标识每个阶段的图片是否标注完成

bitmap设计
在这里插入图片描述
图片映射索引

图片名序号
DMS_2019-11-20-18-46-15-486_1_IR_IR_5745.png1
DMS_2019-11-20-18-46-15-486_1_IR_IR_5750.png2
DMS_2019-11-20-18-46-15-486_1_IR_IR_6885.png3
DMS_2019-11-20-18-46-15-486_1_IR_IR_6890.png4

bitmap key设计 pro_data_ver_images_{版本id}_{阶段序号}
bitmap 位序号:图片的序号
bitmap 位上的值:每个流程有两个状态值:0:未完成(未流转到下一流程);1:完成(已流转到下一流程)

在图片按批次流转的时候把对应阶段的状态重置,然后再统计出每个阶段已完成数量和未完成数量set到redis里,这种列表获取进度的时候都从redis里取就很快了

参考

Redis中BitMap的用法
一看就懂系列之 详解redis的bitmap在亿级项目中的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值