手工一台台填配置不现实,现场都是「Excel 导出一批、平台批量导入」。 批量导入的价值不在省事,在「能提前发现错」——三段拦截,一段都不能省。
上一节把软件跑起来了,这一节把设备接进去。 单台接入和批量接入是两种工作:前者靠细心,后者靠校验。 这一节的重点是「错有哪几种、怎么拦」。
一、编号的五种错
二十位编号最常见的五种错:少一位、多一位、含字母、重号、以及「长度对但字符是别的」。 前三种能靠「长度加数字校验」拦住,后两种要靠「查库比对」和「字符集检查」。 最容易漏的是重号:两条编号完全一样,第一条能过、第二条该拦。 但如果导入程序只做格式校验不做重复校验,就漏了。 漏进去的后果是「后导入的覆盖前一条」,而且不报错—— 等到点播时才发现「两台设备指向同一路流」。
二、三段拦截
第一段在导入前:格式、长度、字符,在表格里直接标红。 这一段最容易做,也最容易被跳。 第二段在导入中:重号、编号段归属,靠查库比对。 「编号段归属」这条容易被忘—— 某个市的设备用了别的市的中心编码,逻辑上不冲突,但级联时会出事。 第三段在导入后:拉一次在线状态,把没注册上的挑出来。 这一段最有价值,也最常被省掉——因为格式全对不代表能注册上,密码、端口、域都可能不对。 三段都做的话,现场返工率会从「一半」降到「几个百分点」。 这不是理论估算,是「多做半天、少跑三趟」的账。
三、注册会挤在一起
批量接入的第二个问题是「同时注册」:平台重启之后所有设备会同时重注册, 几百台一起上,鉴权和写库会被打满。 所以有的平台会做「注册抖动」:设备随机延迟几秒再发,把峰值摊平。 这一步在设备侧做,平台侧不用改。 算一下就知道「串行要多久」其实不是问题: 三百台、每台五十毫秒,串行十五秒,加十个并发只要一秒半。 真正的风险不是慢,是「同时」——并发是好事,但峰值太尖会把数据库打爆。
四、动手 Demo:批量导入三百台,失败的都是哪几种
拿六条编号逐条跑校验(长度、数字、重复),看哪种错能被拦住、哪种会漏。
for code in codes:
bad = []
if len(code) != 20:
bad.append("长度 %d" % len(code))
if not code.isdigit():
bad.append("非数字")
if not bad and code in seen:
bad.append("重复")
seen.add(code)
实跑输出:
--------------------------------------------------------------------
批量导入三百台,失败的都是哪几种
--------------------------------------------------------------------
**手工一台台填配置是不现实的**,**现场都是「Excel 导出一批、平台批量导入」。**
**批量导入的价值不在省事,在「能提前发现错」。**
编号 长度 校验 问题
-----------------------------------------------------------------
`34020000001320000001` **20** **通过** 正常
`34020000001320000002` **20** **通过** 正常
`3402000000132000002` **19** **长度 19** 少一位
`340200000013200000033` **21** **长度 21** 多一位
`3402000000132000000A` **20** **非数字** 含字母
`34020000001320000001` **20** **重复** 重号
六条里通过 2 条,失败 4 条
**四种错里有三种是「长度不对」或「带字母」**,
**这类错在导入时能被拦住**——**前提是「导入程序里写了校验」。**
**最坑的是第五种:重号**:**两条编号完全一样,第一条能过、第二条该拦。**
**但如果导入程序只做「格式校验」不做「重复校验」,就漏了。**
**漏进去的后果是「后导入的覆盖前一条」,而且不报错。**
**所以批量导入的正确设计是三段拦截**:
阶段 拦什么 怎么做
--------------------------------------------------------------
**导入前** **格式、长度、字符** **表格里直接标红**
**导入中** **重复、编号段归属** **查库比对**
**导入后** **注册结果** **拉一次在线状态**
**第三段最容易被省掉,也最有价值**:**格式全对不代表能注册上**——**密码、端口、域都可能不对。**
**所以导入完必须「拉一次在线状态」,把没上线的挑出来。**
**算一下批量导入的时间账**:
300 台设备,每台一次注册往返按 50 毫秒算
串行要 15.0 秒;加 10 个并发只要 1.5 秒
**串行也就十几秒,看着不多**——**但这是「网络理想」的情况。**
**现场往往是一批设备同时上电,注册请求会挤在一起,这时候并发控制比并行更重要。**
六条里过两条、挂四条,挂的四种分别是:少一位、多一位、含字母、重号。
「长度 19」「长度 21」这两条能被长度校验一眼抓住,
「非数字」也能被 isdigit() 抓住——三条都是「导入前就能拦」的。
只有「重复」需要「边导边查库」,这就是「三段拦截」要分三段的原因:
不同错需要不同阶段的信息。
最后那句「格式全对不代表能注册上」是本节的落点:编号对了、密码错了,一样上不去。
而密码对不对,只有「真去注册一次」才知道。
所以「导入后拉一次在线状态」这一步,是不能用格式校验替代的。
30 秒实验
- 算一下:六条编号里几条能通过?(2 条)
- 想一下:哪种错必须「边导边查库」才能拦?(重号)
- 想一下:为什么格式全对也可能注册不上?
常见误区
- 以为「长度对就是合法编号」。 还要全是数字,带字母平台不理你。
- 以为「导入成功就是接好了」。 要拉一次在线状态才算。
- 以为「设备多就一定会慢」。 串行也就十几秒,真正的风险是峰值太尖。
自测三问(点开对答案)
1. 二十位编号的五种常见错是什么? —— **少一位、多一位、含字母、重号、字符不对**。 2. 三段拦截分别拦什么? —— **导入前拦格式、导入中拦重复和段归属、导入后拉在线状态**。 3. 「注册抖动」解决什么问题? —— **把同时注册的峰值摊平**,避免鉴权和写库被打满。下一节讲分域:一棵域树能有多少节点,权限怎么继承。
- ☐ (本节完,下一节 11.03.03 平台管理)