【发布时间】:2021-05-11 10:00:23
【问题描述】:
我有一个 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()
但是,即使我不需要同步写入,我也无法使用多进程来加快导出速度,因为我使用了 SAVE 命令。我可以使用 BGSAVE 来解决问题吗?或者有没有其他解决方案?谢谢!
【问题讨论】:
-
您是否在每个循环中调用
conn = sqlite3.connect(dbfile) r = redis.Redis()?为什么你还要在每个循环中调用 save? -
@GuyKorland 感谢您的提问!我修改了问题中关于循环的部分。如果我在所有 mset 之后调用 save 并执行命令,我会收到一条错误消息“后台保存已在进行中”。
-
你应该在最后调用一次
-
@GuyKorland 我也应该在最后调用执行一次吗?因为我在最后调用 save 时遇到了错误。
标签: python sqlite redis export migrate