刚开始学习 sqlite3 ,请问一下,如果是数据库保存在硬盘上,那么能不能转换成内存模式再操作? 主要是用于查询这块,我保存了电话区号,省市名称等内容,想一次性转换成内存模式,调用起来快些。
1
swuzjb 2017-02-19 16:29:07 +08:00
提前读出来?
|
2
wohenyingyu02 2017-02-19 16:29:08 +08:00 via iPhone
…
|
5
ioiogoo 2017-02-19 22:07:40 +08:00
直接上 redis 呗
|
6
suduo1987 2017-02-19 22:32:15 +08:00 via iPhone
单例,延时加载,条件预加载
|
7
xieranmaya 2017-02-19 23:34:05 +08:00
https://stackoverflow.com/questions/3850022/how-to-load-existing-db-file-to-memory-in-python-sqlite3
大致思路是先备份然后恢复到内存数据库中 我就在想有没有什么能直接操作内存的方法,比如直接把文件读了放在内存里,然后告诉 sqlite3 内存位置,估计读源码肯定可以,就找处理:memory:那段代码修改 |
8
pppguest3962 2017-02-20 00:29:53 +08:00
小码民路过。。。前几年用 C++ & cppsqlite3 做背单词的小软件,把金山词霸词库 XML 的格式( 23 万单词加例句,词性,解释,音标什么的几乎一字不漏弄进去了,数据库也就单文件 26M 上下),查个单词加组织起来的界面显示都是很快的,所以当时略了解过 sqlite3 的皮毛,似乎在理解的印象+文档中, sqlite 检索决定性并不在于 I/O (当然 I/O 也很重要),而在于分库+索引+算法,当时在论坛上有老外做了一秒 2,3 百万的压力也是妥妥的,当时也有想过楼主的问题,没研究下去了,觉得没必要。因为在内存里操作,就直接等于写字节了,而不在于对数据库的操作了,总不能为了喝牛奶而去研究牛的养殖方式吧,如果楼主研究成功了,麻烦烧纸告知,谢谢!
|
9
pppguest3962 2017-02-20 00:33:11 +08:00
漏写了一句,楼主研究学习还是很支持的~
|
10
jininij 2017-02-20 00:54:40 +08:00 via Android
同步到 /dev/shm 中 ?( 逃
|
11
Tyanboot 2017-02-20 01:27:04 +08:00 via Android
…我当初是把 SQLite3 数据库放在了内存盘中…
结果 insert 速度提升了似乎有几十倍。。。。 原本要插好几分钟的数据,只花了十秒左右。。。 |
12
likuku 2017-02-20 01:59:16 +08:00
linux 下,用 tmpfs 保存数据库文件副本
|
13
omg21 OP @pppguest3962 其实我现在已经实现了,在运行时新建一个内存数据库,把硬盘数据库内的记录一条条导入到内存数据库中,但我觉得这种方法比较 LOW ,是吧,所以想看看有没有更为简便的方法能用一两条语句就直接转换了的。
|
14
ijustdo 2017-02-20 12:57:38 +08:00
python sqlite3 的 connect 有个 iterdump()
具体的自己看手册去 嘿嘿 就不告诉你 得到太容易 容易忘记 ^_^ |
15
cnZary 2017-02-20 13:46:16 +08:00
ramdisk (匿了
|
16
omg21 OP @ijustdo
关于 iterdump() 我只找到这一个,并没找到相关文档,这个实例是从内存库里导到文件库的,但我的需要是相反的啊,我想从文件库里导到内存中。 buffer = StringIO.StringIO() >>for line in db.iterdump(): >>>>buffer.write(line) >>db.close() |
17
ilcn 2017-02-21 05:00:50 +08:00
推荐一个神库 sqlitedict ,用过之后保准上瘾。题主闲存进内存麻烦的话,用这个就是一两行代码的问题。
|
19
ijustdo 2017-02-21 11:51:40 +08:00
你先对 文件库里的 iterdump
然后再建一个内存库 内存库导入这个 dump 不就完了 两个 sqlite db a 是磁盘 b 内存 a dump 后 b 导入 a 的 dump 然后进程结束钱 b dump 然后 a 导入 b 的 dump 脑子咋不灵活点呢 |
20
phikaa 2018-06-08 16:41:31 +08:00
|