一开始很疑惑,如果在下次打开软件时能够恢复关闭前的数据。后来,有朋友告诉我软件运行时的数据都会存在内存中,若想要在退出程序时数据不消失,则需要将内存中的数据存到硬盘中。经过一番折腾,我错误的认为存在硬盘里就是存在记事本中,一开始没什么问题,后来渐渐地发现当数据量变大,变复杂的时候,记事本的许多不足就体现出来了。
为了解决记事本内数据难以准确分类,搜索等问题我开始使用数据库,并通过相关调查选择了小而精的sqlite。python有它的接口,我看了几篇教材就开始将它加到了自己的项目中,也尝到了数据库的甜头。但后来,也渐渐的发现了一些不足,比如sqlite不支持多线程访问,当然这不是个大问题,真的让我决定放弃sqlite还是因为如果想远程访问数据库,必须是在设备上做个服务器,专门用来传递数据。
对于我这种懒人来说,搭建一个服务器是个即麻烦又不安全的事情,所以我找到了Mysql这个与sqlite语句相似又支持远程,多线程访问的数据库。
在我学习数据库之前,我觉得数据库很复杂,后来,有人告诉我数据库就是“创建/插入/删除...”,那时,单纯的我就这么信了,等到我“学会”后,发现还真是这么回事,数据库简单的很,幸好当时没人问我关于数据库的问题,否则必然误导众生。然而,随着客户对设备使用时间的加长,数据库访问速度变慢成为非常尖锐的问题。值得注意的是,我指的变慢是肉眼可见,严重影响用户体验的,最严重的是我当时没考虑到数据的写入会变得如此之慢,也没有相应的机制去处理由于数据读写变慢而导致的数据错乱的问题。
数据访问过慢及各种“访问慢后并发症”使我变的很被动,于是我加了一个付费的Mysql群,我向他们说明了我的问题,他们建议我修改了一个设定值,后来我改了,速度大约提高了10倍。但是对于一些操作,还是觉得很慢,他们让我查询一些过去我都没听过参数,这时候,我才发现对于MYSQL我连个皮毛都没学到。后来,他们建议我将项目外包,但是外包给公司10W+,外包给个人1W+的费用我真的出不了。那么,解决问题的方案变得很明确:
1.定时删除数据,防止数据过多,影响数据库读写速度(其实我的数据库中的数据1G不到)
2.减少程序中对数据库的调用
3.优化数据库
对于方案1,客户可能难以接受。对于方案2,我正在做,程序优化一下,可以减少读写数据库的次数。而我作为一个技术人,则更倾向于在近期使用方案2临时解决问题,长远上则选择方案3,但这就需要我深入学习数据库知识。
总而言之,我准备深入学习Mysql的动力就是不但能够使用数据库,更要能让数据库跑的快。