在实际工作中,经常会遇到查询的任务,比如根据某些rs号,检索dbsnp数据库,提取这些snp位点的信息,对于这样的任务,最基本的操作方法是将数据库的内容存为字典,然后检索特定的key即可。对于小文件而言,这样的操作编码简单,运行速度也比较满意,但是对于大型数据库而言,将数据库存为字典这个动作是非常耗费时间的,而且每次运行代码都要执行这样的操作,导致效率大大降低。想要改善这一状况,有以下两种解决办法
1. 对象序列化
对象序列化就是将python中的对象保存为二进制的字节流文件,与之相对的是反序列化, 从二进制文件中读取内容,重新解析为python对象。通过序列化,只需要读取一次数据库,然后将生存的字典对象保存为一个文件,后续在使用时,直接读取序列化产生的文件,就可以快速得到数据库对应的字典。
在python中,通过内置模块pickle进行序列化相关操作,用法如下
2. 使用数据库
对于数据检索这种任务,在工业界有成熟的解决方案——专用的数据库软件,比如耳熟能详的mysql等关系型数据库,以及redis等非关系型数据库。在python3中,内置了模块sqlite3, 支持创建sqlite3数据库,一个轻量级,文本型的数据库。用法如下
将数据存储在数据库中,称之为对象持久化,除了sqlite3之外,python也支持mysql等其他数据库,只需要安装对应的模块即可。
·end·