python、Windows与dbm
python的标准库里面dumbdbm,dbm,gdbm,dbhash都提供差不多的功能,提供类似于字典的数据结构,但和内置的字典不同的是,这些dbm的字典是存在磁盘上的,而不是内存里。
python手册里是这样说的。。。
dbm是早期UNIX下dbm程序继承下来的,dumbdbm是一个简化的便于移植的实现,gdbm是GNU对dbm的实现,bdhash是基于bsddb的实现。
可我还是不知道用哪个,遵循我一贯的原则,我喜欢带g的那个,于是我用gdbm,简单易用,确实不错(我还顺便测了一下性能,发现gdbm比dbm要快一倍左右,更加坚信我的选择)。
直到我试图将代码移植到win32下的时候,我才知道,原来dbm,gdbm在windows下都是没有的,原来别人早想到这个问题,并提供了anydbm模块通吃这几种dbm,原来windows下什么字典存储都没提供,全部都是移植过来的。
anydbm可以自动在四种dbm中做选择,这样不论是Linux还是Windows,anydbm都能选择正确的dbm,对使用者来说,无需任何判断。对于已经创建的dbm文件,也能自动匹配格式并打开,anydbm似乎优先使用dbhash,而不是我喜欢的gdbm,我总觉得一个字典数据结构去劳bsddb的大驾有点。。。。不过反正都已经缺省安装了,就随它吧。
一个缺点是,一般dbm文件在删除记录时,文件都保持大小不变,以便以后增加记录继续使用,这样会使得dbm文件越来越大,gdbm提供了一个reorganize接口可以"瘦身"dbm文件,可惜其它几种dbm不支持,所以anydbm也就没有提供这个接口。换成anydbm之后,我只好将就用saveas-rename来代替reorganize了。
python手册里是这样说的。。。
dbm是早期UNIX下dbm程序继承下来的,dumbdbm是一个简化的便于移植的实现,gdbm是GNU对dbm的实现,bdhash是基于bsddb的实现。
可我还是不知道用哪个,遵循我一贯的原则,我喜欢带g的那个,于是我用gdbm,简单易用,确实不错(我还顺便测了一下性能,发现gdbm比dbm要快一倍左右,更加坚信我的选择)。
直到我试图将代码移植到win32下的时候,我才知道,原来dbm,gdbm在windows下都是没有的,原来别人早想到这个问题,并提供了anydbm模块通吃这几种dbm,原来windows下什么字典存储都没提供,全部都是移植过来的。
anydbm可以自动在四种dbm中做选择,这样不论是Linux还是Windows,anydbm都能选择正确的dbm,对使用者来说,无需任何判断。对于已经创建的dbm文件,也能自动匹配格式并打开,anydbm似乎优先使用dbhash,而不是我喜欢的gdbm,我总觉得一个字典数据结构去劳bsddb的大驾有点。。。。不过反正都已经缺省安装了,就随它吧。
一个缺点是,一般dbm文件在删除记录时,文件都保持大小不变,以便以后增加记录继续使用,这样会使得dbm文件越来越大,gdbm提供了一个reorganize接口可以"瘦身"dbm文件,可惜其它几种dbm不支持,所以anydbm也就没有提供这个接口。换成anydbm之后,我只好将就用saveas-rename来代替reorganize了。

0 Comments:
发表评论
<< Home