关于程序批量入库解决方案
下面小弟关于最近的一个批量入库解决办法与大家分享一下,由于是第一次博客,有什么不对,请大家多多指教
最近项目用到了大并发写数据库操作,当用只做了单条数据 commit 一次,这样做插入会很慢,数据库的压力也很大 , 当时自己的第一个想法就是改变提交方式, 10 条或 100 条提交一次,但是这样会有一个问题,如果数据始终达不到指定的数量,就不能提交。对后续的数据处理会有延迟。
采用数据表做数据补全解决方案:
与运维对接服务器配置与布署过程中,运维提出来了数据库写入批量提交方案,提到使用 mongodb ,但是我对此东西只听过没有研究过,以现在的技术水平非得研究个个把月的才能弄明白,所以自己想到了定时将数据称写入到文件,程序定时去刷到数据库中 ( 业务需求允许数据有一定的延迟性 10 钟以内 ), 开始我的解决方案时新生成一个数据文件,在数据库中插入一条记录,并标识状态为正在写文件,下一时间段新生成的文件重负此步骤,并更新上次写入文件的状态为可写入数据库,程序定时器定时读数据库,写入指定的文件,并把对应的文件写入数据库,把记录状态更新为已入库,此方案有一个问题我写完了才想明白,将来布署时会用的集群,这样集群中的程序访问的是一个数据库,如果集群 1 写完了自己的文件,并更新了数据库,那么集群 2 在起动任务时,在数据库找不到可入库的文件,这样就导致集群 2 的文件并没有入库成功,这样就导致数据的丢失。最后的解决方案不用数据库,程序自读各的文件,在入库成功后,将文件的文件改名,加统一的后缀,这样如果程序失败或当机,可以按文件名来区写入的状态,方便来补数据。这样数据可以保证不丢失。