pyim 最近的一些更新, 遇到问题的同学请及时反馈

这里有个Elisp的ORM包

closql依赖 GitHub - magit/emacsql: A high-level Emacs Lisp RDBMS front-end ,emacsql的问题是每次调用都是启动一个子进程,通过子进程调用,性能非常差。sqlite一般在一个进程内部直接调用。

我说的 GitHub - syohex/emacs-sqlite3: sqlite3 binding of Emacs Lisp 是以modules的形式调用sqlite的动态链接库,把sqlite数据库加载到进程。

改了一下pyim,用sogou的39万数据量的词库测试。sqlite数据库在磁盘上,未使用内存数据库的情况下,执行一次select平均在0.0003秒左右。

没有每次调用都要启动子进程的说法,我猜你没仔细看过emacsql的源代码。

事实上,只要保持住对数据库对象的引用不触发finalizer,每个emacsql都是对原有的进程发送SQL语句,而不是新建进程

你可能看的是emacsql-with-connection的用法,那个宏只是为单次查询方便而设计的。

大概看了一下 emacsql/Makefile at main · magit/emacsql · GitHub ,生成了可执行文件 emacsql-sqlite,这个应该是个代理。最开始找emacs支持sqlite的包的时候,就了解了一下emacsql和其他几个包。最后选择了emacs-sqlite3

emacs-sqlite3已经玩得很开心了。不敢再随便换着玩了。

正常像其他程序使用sqlite,一般都是把使用sqlite的代码编译到程序,调用sqlite的动态链接库。

https://github.com/syohex/emacs-sqlite3 是把调用sqlite的api编译成一个动态库,emacs(我的是win10上自己编译的,可能–with-modules是默认打开了)可以调用。

这个要看 elisp 返回搜索的词条后,要花多长时间,接口速度太慢也不行

性质不一样,emacsql是ORM,emacsql-sqlite3是与sqlite交互的后端,我给emacsql写过一个用sqlite3 CLI的后端,正好也叫emacsql-sqlite3,把他在melpa上的名字占去了,哈哈哈

执行这段后,正常了

pyim 可以做到吗