在出错时如何保存 sqlite 内存数据库中的记录?

2017-01-20 21:28:00 +08:00
 omg21
我的爬虫在工作的时候是从表里取地址,然后再获取数据,为了在某个地址出错以后重新执行时还从这里开始,我用另一个表来记录当前地址的 ID ,这样,下回直接从这里执行就可以了。
我现在想把记录 ID 的这个步骤放到 sqlite 的内存数据库中,这样可以减轻硬盘的压力,可是如果在出错以后,内存数据库也就清空了,那么怎样能在出错时把当前内存数据库的记录保存下来呢?
2552 次点击
所在节点    Python
8 条回复
mkeith
2017-01-20 22:08:14 +08:00
你多大的数据库啊,硬盘吃不消吗?
loading
2017-01-20 22:18:16 +08:00
只是解决你这个问题:

使用普通模式,但是数据库保存在 ramdisk 。
haitang
2017-01-20 23:44:17 +08:00
降低读写次数的话,可以每隔一分钟或 N 条后保存即可,仅仅丢失一部分,我感觉应该可以接受。
如果是提高读写效率,可以见楼上 ramdisk 。
Yinz
2017-01-21 01:18:41 +08:00
呃,虽然不是很了解楼主的需求,但是为什么不用 try..except? 在 except 里把出错的地址写会数据库里?
ryd994
2017-01-21 02:49:13 +08:00
不要加表,加一 bool 字段
你现在这样插入行开销很大
bool 原本有,只是改值开销小
ryd994
2017-01-21 02:50:03 +08:00
另外,你这个需求本质上是个队列,用队列库实现就好办了
omg21
2017-01-21 12:06:21 +08:00
@loading 你说的 ramdisk 就是指的 sqlite 里的 sqlite3.connect(':memory:')这种模式吗?
loading
2017-01-21 13:41:41 +08:00
@omg21 你这是内存模式,我说的 ramdisk 你不知道?
看这里:
http://www.baike.com/wiki/RAMDisk

下次请自己查吧……

你也不说你什么系统,不好提供方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/335950

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX