读书人

工厂写密码的工具软件使用mysql时网

发布时间: 2013-03-12 11:19:35 作者: rapoo

工厂写密码的工具软件,使用mysql时网线断线,怎么做数据重传比较好?
如题,最近写了个写无线账号密码到设备中的软件,使用C++和mysql,多软件对一个mysql。遇到了网线断线的BUG,请各位指点下。

简要的表结构:
表B:(一共大概200K-300K的数据)
密码(key),flag
表A:(初始为空,其中的数据将会提供给客户)
账号(key),密码,flag,时间

简单的流程如下:
1. 从mysql表B中获取密码。(密码客户提供,64位伪随机码)
2. 将SN号的FLAG值置为1。(表明此密码已经使用)
3. 将设备中已经存在的mac地址作为账号,表B中获取的密码作为密码,flag=0,当前时间,写回到表A中。
4. 将密码写入设备。(耗时较久,大概10秒)
5. 如果写入失败,将表B中该密码的FLAG值置为0,并将表A中的该条记录删除。

现在遇到了一个问题,就是工人会把网线踢掉或者是电脑不小心断电了,导致第4步失败后第5步的删除动作只能手动来操作,极大的影响了效率。

为此我在第一步前加了一个操作。
0. 新建一个文本文件check.txt。存下每次操作的sn号,密码等,并且定义一个CHECK_FLAG字段,置为FALSE,第4步或第5步成功后将check.txt的CHECK_FLAG字段置为TRUE。
软件启动检查CHECK_FLAG字段,如果为FALSE,则将前一次记录好表B中该密码的FLAG值置为0,并将表A中的该条记录删除,如果为TRUE,则正常运行第一步。

我感觉就是在整个运行流程上加了一个用txt文件控制的锁。


由于工厂希望软件能完美的做到账号密码的一一对应,不会少数据也不会多数据,不需要手动的操作数据库来进行删除动作。我想问下:

1. 使用文件备份相关数据是否有风险,长时间反复的读写操作会不会出现文件损坏等异常情况?

2. 遇到网线断线或者电脑死机这样的问题时,如何重传来保证数据的正确性呢?


谢谢大家。 mysql 数据库 c++
[解决办法]
一.不应该将记录删除,而是状态表示
1 - 初始化
2 - 写入设备中
3 - 写入成功
4 - 写入失败
等等

二、发生异常,重启后,最好能直接读取设备的密码(既然能写入,应该能读出来吧)
然后改表记录的状态,也可以再加上check.txt,多些保障,
否则密码作废

三、用文件保存本地信息,也是不靠谱的
断电的话,什么情况都会发生
[解决办法]
楼主可以了解一下银行冲正交易的机制。
[解决办法]
事务啊!事务!!

读书人网 >C++

热点推荐