开发个人轻量级数据库引擎 Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061214173952300.html
我计划开发一个个人轻量级数据库引擎,用于一些特殊场合.
目前,已经用基于散列表的方式做了一个简单的.100W个记录的关键字查询时间,最慢不到0.5秒. 第一次做,没什么经验.希望找些志同道合者,一起讨论学习.
啊啊
我也想做啊
同志啊(不是那个同志)
偶现在有个问题是,跟外存打交道这个问题,怎么减少这个损耗,楼主有什么好主意没?
只是用一个散列表吗?
如果目标只是100W,还好些,LZ想过4,294,967,296(High(Cardinal))亿条记录怎么进行检索没?我觉得要么不作,要作就作到32位的最大检索范围.
解释器楼主准备怎么做呢?
有什么计划吗?
可以具体说说吗
因为我理解的轻量就是:一个简单的结构(record),有检索,增加,修改,删除的功能就可,数量最好是1000W->1亿左右,其它功能就不需要了.最多一个将这个结构Load/Save的功能.
楼主如果有兴趣,可以一块弄弄.俺早就想弄了.
对,尽量减少读写磁盘的次数.
表本身目前采用记录文件的格式,其本身维护一个删除链表.对删除的记录只做删除标记,然后加入到删除链表中.新加入的记录首先选择这个删除链表的头节点,有点类似栈的结构.
对记录的管理采取散列的桶方式,这种方式是最适合存放在磁盘等持久存储设备上的.
目前100W没什么问题,更大的还没测试.估计到1亿问题不大,再上去就没把握了.
不需要解析什么所谓的SQL之类的功能
因为只是用于一些场合,因为需要大量数据,但又不想依赖于DB,当然速度也要考虑,所以,自己弄一个轻量的结构处理就可以了.楼主如果是想写一个数据库,有什么解析SQL语句,还有一堆功能的话,俺就没兴趣了,直接看MySQL的源码得了.
解释器的问题是下一步.先把底层的功能都做全了.在考虑解释器的问题.
一般来说.目前这些流行的数据库,我们真正用到的功能还不到40%. 而且,如果想搞点保密措施,目前的虽然提供了加密功能,毕竟是公开的.安全性不如自己定义的强.
我现在的问题是,有点类似ACCESS的问题. 大家都知道,ACCESS的数据库文件是会越来越大.除非自己专门压缩一次. 这是由于尽量减少读写磁盘次数,保护磁盘而选择的算法造成.
我现在因为对删除的节点只做删除标记.对数据量的增大到没什么问题,就是如果数据量大幅删除,就会有造成很多容余空间.除非也象ACCESS一样,另外压缩一次.
这个应该不是问题,即使不解决问题也不大,最多像OS一样,定时给文件整理一下也成.
如果你后期想弄,可以这样弄一下,不过好像会产生一堆的碎片到是:
每一块(记录)在文件保存的地方,增加长度和标志位,估计你那都有. 增加的时候,检查那个已经删除的块,如果增加块小于删除块,则将增加块写入删除块,并将剩余的空间再建一个删除块,这样,删除块的体积就少了. 不过到后面可能这个删除块就会像碎片一样越来越多,好像就是增加的体积相对慢些.
做为技术研究到是不错.可以得到很好的经验.
实际应用中还是用最通用最简单的方式.
不支持SQL怎么查呀。多表联合就不好查了吧。
用FireBird的嵌入式RDBMS。
fb支持嵌入式数据库了么?fb是我见过最好的轻量级dbms
这个应该不是问题,即使不解决问题也不大,最多像OS一样,定时给文件整理一下也成.
如果你后期想弄,可以这样弄一下,不过好像会产生一堆的碎片到是:
每一块(记录)在文件保存的地方,增加长度和标志位,估计你那都有. 增加的时候,检查那个已经删除的块,如果增加块小于删除块,则将增加块写入删除块,并将剩余的空间再建一个删除块,这样,删除块的体积就少了. 不过到后面可能这个删除块就会像碎片一样越来越多,好像就是增加的体积相对慢些.
------------------------------------------------------------------------------------
对,这个我实现的基本跟你说的差不多。好象,这个碎片是不可避免的。好在我用的散列方式是把最近增加的尽量的靠近,尽量符合外存的读写方式。
至于SQL,目前到不是最急的,多表联合也能实现,只是麻烦点。
FireBird的RDBMS不了解,它是什么方式实现的?
做为技术研究到是不错.可以得到很好的经验.
实际应用中还是用最通用最简单的方式.
-----------------------------------------------------------
我这个就打算在实际中用。因为有些数据需要不希望别人了解。自定义的数据库是比较好的方式。
FireBird的嵌入式RDBMS,还没有连接到exe中,是一个DLL,不需要配置。
FireBird的嵌入式RDBMS,还没有连接到exe中,是一个DLL,不需要配置
---------------------------------------------------------------------
它的引擎是什么原理?
数据需要不希望别人了解可也用不着开发一个数据库吧.有太多的加密方式了.你们头听到都要气死了,项目维护可是一个大问题。
保密要求更高一些的数据难道要开发一个操作系统不成。
技术研究可以,实际项目中不建议使用,会造成很多时间放在这上面,而在业务和设计方面投入时间会变少。
数据需要不希望别人了解可也用不着开发一个数据库吧.有太多的加密方式了.你们头听到都要气死了,项目维护可是一个大问题。
保密要求更高一些的数据难道要开发一个操作系统不成。
技术研究可以,实际项目中不建议使用,会造成很多时间放在这上面,而在业务和设计方面投入时间会变少。
------------------------------------------------------------------
走极端了.这个开发数据库引擎是因人而异.当然,时间和效率的问题已经在考虑的范围内.
本身就是一个轻量级的引擎,维护时间不会很多.既然已经在做了,你说的问题当然早已考虑过了.
所以,我开这个贴不是讨论应该不应该做,而是讨论怎么做的好.希望多给点技术方面的意见.谢谢.
楼主可以参考:absolute,DBISAM,NexusDB等,都是Delphi写的,NexusDB吹的比Oracle还牛呢。
NexusDB的优点就是可以直接连接到exe中,但是没有FireBird的嵌入式版本好用。
FireBird 是做得最好的.
几乎所有的数据库功能都有
表,外键,视图,过程,触发器,UDF
总之好用,实用
我给公司做的一个项目管理系统也用它来做的. 还可以. 体积小,功能强
现在出最新的 2.0 版了.
楼主可以参考:absolute,DBISAM,NexusDB等,都是Delphi写的,NexusDB吹的比Oracle还牛呢。
-------------------------------------------------------
多谢提供的信息,不知道他们是不是开源的?哪有源码?
......嘿嘿 偶不知道 顶北京猴
mak
Firebird 是开源的