使用Python将大型数据库从sqlite迁移到Redis

2024-09-30 14:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个SQLite数据库(16G)。表中有三列(起点、终点、距离)。我想将数据库导出到Redis,以便按来源和目的地进行更快的查询。目前,我使用以下代码导出到Redis

conn = sqlite3.connect(dbfile)    
cur = conn.cursor()
r = redis.Redis()

# I loop the following code
cur.execute("SELECT o,d,DIST FROM network LIMIT [startloc] OFFSET [offset];")
distlist = cur.fetchall()
records = {'{},{}'.format(o, d): DIST for o, d, DIST in distlist}
with r.pipeline() as pipe:
    pipe.mset(records)
    pipe.execute()
r.save()

但是,即使我不需要同步写入,我也不能使用multiprocess来加速导出,因为我使用SAVE命令。我可以使用BGSAVE解决此问题吗?或者还有其他解决办法吗?谢谢


Tags: 代码redis数据库距离executesqlitedist来源
1条回答
网友
1楼 · 发布于 2024-09-30 14:15:26

我认为您在Redis中混淆了两个概念:

  • 管道:一次向Redis发送多个命令,并立即返回对所有命令的响应,以节省网络流量
  • 持久性:将Redis的内容保存到磁盘,因为默认情况下Redis是内存中的数据库,即不使用Save或BGSAVE

Redis中的管道只有在将多个命令组合在一起时才有意义,而在发布的示例中则不是这样。尝试多次调用MSET(例如10k)并在完成后调用execute

写入磁盘肯定是有意义的,但不要超过一段时间,例如,在导入的最后,每1小时或类似情况写入一次磁盘

你好,马丁

相关问题 更多 >

    热门问题