资讯动态

bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化

发布时间:2026/10/30 2:30:10 来源:尧图企业网站定制
最近在做一个标签位图的离线缓存服务每次冷启动都要重建上千万长度的 BoolHybridArr太贵。我需要把混合布尔数组直接落盘、下次原样读回来。翻了 bool-hybrid-array当前我用的是 9.13.x 线之后我的结论很直接这个库的对象序列化就是 BHA 那一套落盘文件是.bha入口是Create_BHA和Ask_BHA。本文记一下我是怎么用的。订正2026-10-29本文写于 9.13.x 早期当时落盘走的是旧版.bha。自 9.12.0 起库已引入新的.bhax格式BHAX_Descriptor新建工程建议优先用.bhax.bha仍作为向后兼容的旧格式可读文中 Create_BHA/Ask_BHA 的用法在兼容路径下仍成立。我理解的序列化入口9.10.0 版本引入了一对函数Create_BHA负责把对象写成.bha文件Ask_BHA负责读回来。它俩处理的就是库里的数组对象包括二维的BHA_List。frombool_hybrid_arrayimportBoolHybridArr,BHA_List,Create_BHA,Ask_BHA arrBoolHybridArr([True,False,False,False,True,True,False,False,False,True])arr2BoolHybridArr([False,False,False,False,True,True,False,True,True,False])arr3BHA_List([arr,arr2])Create_BHA(single_bool_array,arr3)# 自动生成 single_bool_array.bhaprint(Ask_BHA(single_bool_array))读回来结构不丢BHA_List([ BoolHybridArr([True, False, False, False, True, True, False, False, False, True]), BoolHybridArr([False, False, False, False, True, True, False, True, True, False]), ])为什么我用它而不是自己 pickle一开始我当然想过pickle.dumps但混合数组内部是密集段 稀疏段两段表示自己 pickle 等于把它的内部存储细节也耦合进了我的缓存格式。库一旦重构内部存储我的历史缓存就可能全废。用官方的Create_BHA/Ask_BHA存储怎么变是库作者的事我只面对.bha这个稳定的落盘约定。另外在较新的 9.11.x 里BHA_List还带了save/load我记得是 9.11.49 修序列化 bug 那版补的日常一二维数组的存读我也会直接用它语义和.bha这套是一致的arr3.save(tags.bha)restoredBHA_List.load(tags.bha)我这边的落地方式标签位图每隔一段时间批量重建一次重建完Create_BHA落一份.bha服务冷启动优先Ask_BHA读缓存读到就跳过重建读不到或版本不符再回退到全量计算因为.bha是和库版本绑定的我在文件名里带了数据版本升级库后主动让旧缓存失效重建一次。小结至少在我的使用面里bool-hybrid-array 的「把混合布尔数组存成文件再读回来」就是 BHA 这条路Create_BHA写.bha、Ask_BHA读.bha搭配BHA_List.save/load。要做混合布尔/二维位数组的持久化记住这一对函数就够了不必再去外面另找序列化轮子。项目在 GitHub / Gitee 上搜BKsell/bool-hybrid-arrayPyPI 包名就叫bool-hybrid-array作者蔡靖杰。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑