我们的项目使用的是sqlite3数据库。在一次常规模拟测试中,我们想了解,如果程序正在运行中,用户将sqlite3数据库文件删除,程序能否进入预设的重置流程。
结果,我们却让我们有些意外。
于是我写了一段go代码模拟一下该过程。
该段代码是简单的通过API来访问数据库内容。
我们的重点不是API部分,而是我们开启了一个数据库的连接,然后我们将数据库文件删除后会有什么现象发生呢?
首先,我们先向插入一些数据。
然后我们查询一下。
我们看到,当前目录已经生成了一个test.sqlite文件。
我们看看该进程在系统的状态。
此时,我们发现,没有写入成功,而是显示了一个错误。
我们先不忙者下结论,我们再看看另外一种写法。
那就是每次使用完数据库就关闭连接,下次使用再打开。
此时,给我们表现是,该表已经不存在了。
我们再查看一下数据库,发现数据库居然还在。
虽然库文件依然存在(应该是查询是sql.Open创建的),但其中的数据,表都不存在了。
通过两种方法的对比,我们比较容易想到 在第一种操作中,由于我们打开一个数据库连接,始终没有关闭,即使数据库删除后,其引用仍然存在,文件还没留在内存中。后一种,我们每次操作完成后会关闭数据库,导致数据库直接被删除了。
但,如果数据库很大,内存放不了那么多怎么办?
所以,这个还有待验证,先记录一下,留个坑给自己。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!