delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
开发个人轻量级数据库引擎 Delphi / Windows SDK/API
http://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   是开源的

posted on 2009-05-12 16:03 delphi2007 阅读(304) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。