快捷搜索: 王者荣耀 脱发

橙单微服务之批量导入

上面这些代码全部是自动生成的,批量导入 如果你配置了这个表单,支持批量导入,那么代码就会生成,否则不会。 出于性能考虑,这里可以存储在本地,当然也可以存储在minio等oss中 橙单会生成一部分需要忽略的字段,比如创建人,创建时间,更新人,更新时间,逻辑删除等。 这里也给出了注释,如果要忽略其他的字段,也可以直接在这里修改,一行即可。

如果excel中的顺序,不是字段中的顺序,可以在这里适当调整即可。

从这两点可以看出,修改就是非常简单的。二次橙单,刻意没有去考虑生成100%的代码,而是确实预留出一些二次开发的填空。这样就非常容易达成平衡。在代码质量,架构、业务和开发效率方面。非常平衡。

如果过度的追求代码生成占比,代码质量和运行时效率都会大幅度下降的。

这里生成的代码注释,解释的都很清楚,如果要做导入数据的字典翻译,只需给这个set添加字段名即可。非常简单。

比如,excel中存入的是gradeName,如“二年级”,这里就会翻译成为对应的id,比如:2,然后插入到原始业务表中,这个就是批量导入中的字典翻译能力 在实际导入的代码中,橙单没有简简单单的使用 普通的方式,而是采用了这种SAX的回调模式,这样可以在导入数据过多的时候,不仅可以加速导入效率,同时还能节省内存。 这里会对所有导入到内存中的数据,进行关联字段的验证 这里就是批量验证,这些都是橙单为生成的代码,如果有误生成的,可以直接修改,并移除。 这些都是基于常量字典的数据验证 这些都是字典表字典的验证,这些字典表都是物理的数据表,但是数据都在缓存中,因此效率更高。 这些是普通业务表之间的关联id的验证。 因此在橙单中,这三类id验证都是完整支持的。 常量类,缓存的字典数据,和数据表中的字典。

对于性能而言,如果有有10万条批量导入的数据,有4个这样需要验证的字段。

那么验证的次数就是40万次,这个性能开销是巨大的。

橙单通过两种方式优化了,第一就是有的字典是redis缓存,还有就是所有的验证都是批量验证,

比如一次验证1000条,那么对数据库的操作次数,就会降低一千倍 如果有的验证id是基于redis的,那么会折半对数据库的访问次数。 最后一步,就是批量插入了。即便这一步,橙单生成的代码也做了足够的优化, 第二个参数是-1,表缺省全部批量插入了,这个批量是真正的insert list那种批量,不是循环insert那种伪批量。 如果第二个参数不是-1,而是具体的数字。 比如10万条数据,不可能一个insert list全部插入,这个是有数据库语法限制的。而且也不能这样蛮干。

所以我们可以设置每个insert list的数据条数,比如2000,那么10万的数据,就会分为50次插入。并最终一次提交

这样可以有效地规避数据库的语法限制,同时也不会给数据库瞬时带来巨大的压力。

好了,批量导入分享到这里。

经验分享 程序员 微信小程序 职场和发展