Люди добрые! Объясните как происходит обращение к БД (к примеру BDE) на физическом уровне. Т.е. как это движок базы умудряется все хранить в одном файле, а данные в середине и других местах удалять может?
Хех, да это скорее не вопрос по конкретной базе данных а по программированию... Посмотри функции, винапи - SetFilePointer, а в Си - fseek...
Поищи в сети про structured storage. В книге Searching & Sorting by Thomas Niemann (книга лежит тут на сайте в разделе документов) есть про деревья B+/B++, что тоже очень кстати.
а данные в середине и других местах удалять может? Не всегда удаление записи означает физическое удаление - достаточно пометки об удалении и некоторой перестройки индексов (ключей). Самый простой пример, кажется, процедура оптимизации базы аутглюка.
К данным он обращается используя структуру, которая говорит о положении этих данных в файле. Касательно модификации - все просто. Если модификация не увеличивает объем данных - до данные перезаписываются. Если модификация увеличивает объем данных, то старые данные помечаются удаленными, а новые дописываются в конец. Ну и соответсвенно периодически происходит фиксап базы - когда помеченные удаленными данные действительно удаляются. Как вариант использования удаленных данных - при модификации базы, либо при добавлении новых данных происходит поиск пустых "дырок" (по английски gaps) и данные пишутся не в конец файла, а в тот gap, в который они влезут. Это приводит к тому, что период после которого желательно делать фиксап увеличивается намного.
Спасибо! Сам тоже не много нашел, правда есть вопросы.. Добавлю еще по способам: Индексные файлы (плотный и не плотный индекс) B-деревья а так хоть принцип более или менее стал...