Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
#1

Удаление одной записи из БД без перезаписи всего файла - C++

23.04.2014, 18:09. Просмотров 284. Ответов 6
Метки нет (Все метки)

Здравствуйте
Наверное, по моему вопросу много информации в интернете, но я не знаю, как сформулировать его поисковику.

Я собираюсь хранить в бинарном файле небольшую БД. Допустим, имена друзей и номера их телефонов. Как бы так сделать, чтоб удаление одной записи из БД не требовало полной перезаписи всего файла?

Если размер файла базы будет, скажем, 100Мб, хотелось бы, чтоб удаление и добавление записей производилось сравнительно быстро, не создавая лишней нагрузки на винчестер. Несколько идей у меня есть... Но, возможно, кто-то где-то встречал описание профессиональных методик и подводных камней в них?

Для тех, кто считает, что мне не стоит "изобретать велосипед" и создавать что-то своё, а стоит воспользоваться SQLite:
Кликните здесь для просмотра всего текста

Не забудьте эту мысль, когда соберетесь завести детей.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,993
Завершенные тесты: 1
23.04.2014, 20:15     Удаление одной записи из БД без перезаписи всего файла #2
Цитата Сообщение от sion5 Посмотреть сообщение
не создавая лишней нагрузки на винчестер
Все операции ввода-вывода выполняются через буфер обмена.
Поэтому, особо не беспокойтесь за винчестер.
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,807
23.04.2014, 20:42     Удаление одной записи из БД без перезаписи всего файла #3
Т. е. ты хочешь свой формат придумать, что ли?
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
23.04.2014, 21:07  [ТС]     Удаление одной записи из БД без перезаписи всего файла #4
Да, свой форматик...
Уже придумал кое-что, почитав про FAT и NTFS, но думал, что вдруг кто-то еще идей или чтива подкинет.
newbie666
Заблокирован
23.04.2014, 21:37     Удаление одной записи из БД без перезаписи всего файла #5
Цитата Сообщение от sion5 Посмотреть сообщение
Уже придумал кое-что, почитав про FAT и NTFS, но думал, что вдруг кто-то еще идей или чтива подкинет.
ну расскажи что сам придумал, а так то, если у тебя файл 100 магабайт, почему бы его не загрузить в память и не работать с ним сколько надо, потом один раз сохранить на хард. Или ты хочешь после изменения каждой записи файл на харде менять? Не очень рационально, можешь погуглить в сторону кеша - если уж свсем ничего не придумаешь - так и быть - мозги поднапрягу ))))

Добавлено через 54 секунды
P.S.: Неужели ты думаешь, что, скажем, Oracle, при изменению каждой записи в БД на хард её пишет?
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
24.04.2014, 00:06  [ТС]     Удаление одной записи из БД без перезаписи всего файла #6
Цитата Сообщение от newbie666 Посмотреть сообщение
если у тебя файл 100 магабайт, почему бы его не загрузить в память и не работать с ним сколько надо, потом один раз сохранить на хард.
Ну пусть будет 100Гб, а не 100Мб... Не хватало еще его полностью перезаписывать в конце каждого сеанса работы с программой...
Да ладно... Попробую сделать по аналогии с файловой системой. Думал, вдруг есть какие-то более хитрые методики.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 08:12     Удаление одной записи из БД без перезаписи всего файла
Еще ссылки по теме:

Удаление записи из бинарного файла C++
Как без перезаписи удалить строку из файла? C++
Функция getc() и удаление из файла всего, что было считано C++
C++ Изменение строки из файла без перезаписи
Файлы C++. Запись в конец файла, без его перезаписи C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
newbie666
Заблокирован
24.04.2014, 08:12     Удаление одной записи из БД без перезаписи всего файла #7
ты имеешь ввиду не удалять запись в файле, а на харде помечать кластеры как не занятые - типа как при стирание или форматирование?
Yandex
Объявления
24.04.2014, 08:12     Удаление одной записи из БД без перезаписи всего файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru