我正在开发一个简单的数据库系统(不希望使用股票数据库系统的开销,就像gdbm / bdb一样简单),我正在试图找出最有效的处理方式从数据库文件中删除记录。
我提出了两个看似天真的解决方案,一个是昂贵的内存,另一个是昂贵的磁盘空间,而且两者在时间上看起来都很昂贵。第一个涉及将整个数据库读入内存,然后在旧数据库上重写它,除了需要删除的记录。第二种方法涉及将旧数据库文件中的记录复制到新数据库文件(跳过要删除的记录),然后将新文件复制到旧文件夹上。
有更好的方法吗?现有的数据库包如何处理这个?
答案 0 :(得分:0)
另一种选择是在删除记录时将文件的部分标记为未使用,然后可以在添加新条目时将其他记录添加到文件的该部分。您可以选择使用某种“缩小”流程,该流程将遵循您在指定时间间隔内提到的某种方法。
我很确定MySQL的innodb表类型使用类似于此的方法来管理文件(尽管它们不提供收缩方法)。
答案 1 :(得分:0)
您的数据库是否作为平面文件实现?我认为您可以考虑使用B+ tree 因为与你提到的方法相比,它会更简单。