Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 09:39   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нет ни одной причины держать в памяти дырки
В памяти - да согласен.
Цитата:
и ни одной причины сохранять дырки обратно в файл.
Еще как сохраняют.
Команды удаления являются креаторами дырок
Тем паче я говорил о том что СУБД не одобряют поджимания файлов. ИМХО только Сиквел из всех имеет более менее выскочный механизм дефрагментации.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2012, 17:55   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В памяти - да согласен.

Еще как сохраняют.
Команды удаления являются креаторами дырок
Тем паче я говорил о том что СУБД не одобряют поджимания файлов. ИМХО только Сиквел из всех имеет более менее выскочный механизм дефрагментации.
ну вот смотри: грузишь с БД 5 строчек.

1 1 1 1 1

Потом две добавляешь:

1 1 1 1 1 1 1

И 3 удаляешь:

1 1 1 1

Ну и сохраняешься обратно на диске.

В следующий раз ты будешь грузить 4ре строки.

Вопрос к тебе: назови хоть одну причину, по которой БД стоит сохранять на диск дырки?

Ты действительно предлагаешь сохранять на диске: 1 1 0 1 1 1 1 ?

С таким подходом не удивительно иметь на выходе гигабайтный файл, в котором 600 метров - это дыры

/зы команды удаления оперируют с памятью, а не хранилищем. За искл. "особых случаев".
_Bers вне форума Ответить с цитированием
Старый 10.08.2012, 19:46   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вопрос к тебе: назови хоть одну причину, по которой БД стоит сохранять на диск дырки?
Вопросом на вопрос: Как по твоему, почему тяжелые СУБД стараются заранее зарезервировать место под чанк для базы достаточно большое, чтоб при работе с данными не нуждаться в дерганьи замедляющих работу методов дописывания в файл?
Почему АБД стараются не поджимать базу часто?

Пример: ВКонтакт не удаляет из своих БД никакие данные в ущерб месту, даже если пользователь их удалил (а на самом деле просто пометил как скрытые). А теперь ответь себе - почему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2012, 05:09   #14
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

2Стремящийся
Цитата:
Можно ли физически удалить данные из файла?.
Это долго.

Цитата:
Как вариант, проверять перед записью в файл наличие пустых структур и записывать на это место новую.
Можно тупо вести упорядоченный список свободных мест и записывать новые данные в минимальное по размеру место, где они помещаются. Если такого места нет, то склеить свободные места или перестроить файл. Короче, можно сделать упрощенную версию выделения динамической памяти.
А вот так, как предложил _Bers,
Цитата:
"файл, который на жестком диске" ты используешь один раз при старте, и один раз по окончании работы.
- лучше не делать. Если, конечно, у тебя более-менее серьезное приложение. Зато отображаемые в память файлы применять можно.

Цитата:
Да, согласен. Однако, у меня файл с одним именем используется во многих функциях программы, как тогда быть?
Передавать как параметр, а не использовать глобально или захардкожено.

2_Bers
Цитата:
Все что только возможно - берется в память. Нет ни одной причины держать в памяти дырки, и ни одной причины сохранять дырки обратно в файл.
СУБД, делающие мэппинг файлов, с тобой не согласны. Всем известная MongoDB тому яркий пример.

Цитата:
Вопрос к тебе: назови хоть одну причину, по которой БД стоит сохранять на диск дырки?
Можно назвать несколько распространенных причин, по которым размер БД может быть больше размера реальных данных:
1) preallocated files размером вплоть до 2 Гб - уменьшаем фрагментацию на диске и стоимость увеличения объема данных
2) padding на уровне коллекций - мало мешает, так как в освободившееся место мы вполне можем записать другой документ. И никаких дополнительных действий делать не нужно
3) padding на уровне документов - уменьшаем вероятность переноса документа в другое место (а следовательно не нужно будет обновлять все индексы этого документа) при обновлении (если размер документа перестал влезать в свободное пр-во)
still_alive вне форума Ответить с цитированием
Старый 11.08.2012, 13:29   #15
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

2still_alive, спасибо за интересный ответ
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление структуры из файла Axrik Общие вопросы C/C++ 1 09.06.2012 11:20
Запись структуры из файла Evgeniy21 Общие вопросы C/C++ 2 15.05.2012 13:54
Чтение структуры из файла! Olegzxc Общие вопросы C/C++ 1 01.12.2011 00:40
УДаление строки из файла методом создания временного файла. dykatob Общие вопросы C/C++ 3 28.05.2011 01:46
Удаление(добавление) поля из(в) структуры kilgoreq Помощь студентам 0 22.02.2011 00:59