前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python海量数据快速查询的技巧

python海量数据快速查询的技巧

作者头像
生信修炼手册
发布2020-05-28 20:55:25
1.2K0
发布2020-05-28 20:55:25
举报
文章被收录于专栏:生信修炼手册生信修炼手册

在实际工作中,经常会遇到查询的任务,比如根据某些rs号,检索dbsnp数据库,提取这些snp位点的信息,对于这样的任务,最基本的操作方法是将数据库的内容存为字典,然后检索特定的key即可。

对于小文件而言,这样的操作编码简单,运行速度也比较满意,但是对于大型数据库而言,将数据库存为字典这个动作是非常耗费时间的,而且每次运行代码都要执行这样的操作,导致效率大大降低。想要改善这一状况,有以下两种解决办法

1. 对象序列化

对象序列化就是将python中的对象保存为二进制的字节流文件,与之相对的是反序列化, 从二进制文件中读取内容,重新解析为python对象。通过序列化,只需要读取一次数据库,然后将生存的字典对象保存为一个文件,后续在使用时,直接读取序列化产生的文件,就可以快速得到数据库对应的字典。

在python中,通过内置模块pickle进行序列化相关操作,用法如下

代码语言:javascript
复制
>>> import pickle
>>>
>>> data = {1:'A', 2:'B', 3:'C'}
# dump 进行序列化
>>> with open('out', 'wb') as f:
...     pickle.dump(data, f)
...
>>>
# load 进行反序列化
>>> with open('out', 'rb') as f:
...     data = pickle.load(f)
...
>>> data
{1: 'A', 2: 'B', 3: 'C'}

2. 使用数据库

对于数据检索这种任务,在工业界有成熟的解决方案——专用的数据库软件,比如耳熟能详的mysql等关系型数据库,以及redis等非关系型数据库。在python3中,内置了模块sqlite3, 支持创建sqlite3数据库,一个轻量级,文本型的数据库。用法如下

代码语言:javascript
复制
>>> import sqlite3
>>>
>>>
>>>
# 创建数据库
# 连接数据库
>>> conn = sqlite3.connect('test.db')
# 创建游标
>>> c = conn.cursor()
>>> c.execute('''CREATE TABLE alphabet (cnt  integer, date text)''')
<sqlite3.Cursor object at 0x7f3e514413b0>
>>>
>>> for key, value in data.items():
...     c.execute('INSERT INTO alphabet VALUES (?, ?)', (key, value))
...
<sqlite3.Cursor object at 0x7f3e514413b0>
<sqlite3.Cursor object at 0x7f3e514413b0>
<sqlite3.Cursor object at 0x7f3e514413b0>
>>> conn.commit()
>>> conn.close()

# 使用数据库
>>> conn = sqlite3.connect('test.db')
>>> c = conn.cursor()
>>> for row in c.execute('SELECT * FROM alphabet WHERE cnt <= 2'):
...     print(row)
...
(1, 'A')
(2, 'B')

将数据存储在数据库中,称之为对象持久化,除了sqlite3之外,python也支持mysql等其他数据库,只需要安装对应的模块即可。

·end·

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档