EDB数据库结构易语言源码EDB是闭源不好复现,之前写过动态调用易语言支持库实现其他语言调用EDB,但是支持库只有32位。所以稍微研究了下结构,从逆向代码看,EDB应该不是B+树结构,所以不是特别快也能理解,既然做了就想着在向下兼容的前提下再优化一下edb,吴总使用的古代API和调用MFC都是浪费性能并且导致移植x64困难,像openfile、COleDateTime::GetTickCount(),这些就给换了,因为代码是从C++翻译的,有些结构体和指针的处理累的脑袋疼,直接扣汇编代码可能会很方便,速度可能会更快,但是水友可能就有点看不懂了,优化完以后可以大于两G。读写也改为内存文件映射+临界区。速度快很多,大文件处理也简单,也不占内存,多线程操作也不蹦。本来是想让EDB现代话一点,可以通过sql语句操作,可以设置编码,实现起来比较简单,固定储存长度unicode可访问的长度是ansi的两倍,换gbk啥的就只能访问一半,或者直接添加宽字符类型。可是这样核心库的edb就打不开优化后的了,所以先没做调整,保证兼容,换cpp的话有重载和模板,通用型和可变参比较好实现,易的话只能是支持库,没指针,结构体也难用,所以搞起来很麻烦,因为太累就没有往后封装,精易里我记得有分享的字节集操作EDB的,有兴趣自己搜一艘,论坛也有内存映射文件模块。吴总自己都不搞,我搞起来也没有动力,大家有兴趣的自己继续封装吧,封装完黑月也可也用。
速度测试了一下,比核心库快25%。带字节集型的差距会更大,在40%左右,C++没有想象中差距那么大,可能是我写库的时候又在外面嵌套了一层中文再call过去的原因,但也是维度碾压。

发表回复

后才能评论