Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

дефрагментация файла


Страницы:   1 2 3

mem ©   (2010-11-24 16:13:00) 

Всем привет!
Собственно сабж - как мне записать файл данных одним последовательным куском(или потом дефрагментировать)? Вероятно, без Win API не обойтись, только я не знаю, что гуглить, подскажите, плиз. Или какой-нибудь более простой способ, подходящий для задачи - дефрагментация указанного файла. Размер в пределах 1 Гб. Предполагаем, что на диске есть свободный кусок нужного размера. (потом можно откинуть предположение или сразу - если не очень усложнит решение)


Inovet   (2010-11-24 22:48:00) [21]

> [21] mem   (24.11.10 22:32)
> серьезно? Про фрагментированность индексов мы не слышали...

Сервер непрерывный кусок диска под базу требует? Выделяет куски под страницы, потом заполняет по мере надобности. Дефрагментировать файл ну хорошо, средствами сервера дефрагментацию сделать в самом файле, тоже наверно хорошо.


mem   (2010-11-24 22:32:00) [22]


> Inovet ©   (24.11.10 22:24) [20]


> Как-то ведь у них MSSQL работает без дефрагментации

серьезно? Про фрагментированность индексов мы не слышали... попробуй, сравни скорости выполнения запросов с фрагментированными индексами и нет.

а в микрософт следует стремиться, в первую очередь, пиарщикам - по этому показателю они впереди планеты всей без всяких сомнений.


Inovet   (2010-11-24 22:24:00) [23]

Про резюме в МС не зря сказали. Как-то ведь у них MSSQL работает без дефрагментации, а у тебя она критична, значит твой алгоритм круче.


mem   (2010-11-24 22:01:00) [24]

Удалено модератором


Anatoly Podgoretsky   (2010-11-24 21:48:00) [25]

> mem  (24.11.2010 21:44:17)  [17]

С последнего пункта не получится, сначало надо где то деньги взять.


mem   (2010-11-24 21:44:00) [26]


> супермегабыстрый алгоритм поиска по индексу

там еще и данные. И один индекс пользуется другими. Так, навскидку, читать надо будет десятков пять последовательных массивов за присест, если каждый раз позиционировать - 50*мс эдак 5(или больше?), четверть секунды, да еще потом выбирать сами данные...


>  Anatoly Podgoretsky ©   (24.11.10 21:41) [16]
>
> > mem  (24.11.2010 21:35:14)  [14]
>
> Кеш снять и продать, контроллер выпилить и сдать в драгметаллы
> - деньги
> пропить


много возни, предпочитаю начинать с последнего пункта))


Anatoly Podgoretsky   (2010-11-24 21:41:00) [27]

> mem  (24.11.2010 21:35:14)  [14]

Кеш снять и продать, контроллер выпилить и сдать в драгметаллы - деньги
пропить


mem   (2010-11-24 21:36:00) [28]


> а это я не пропустил при первом чтении:

а это я пропустил при первом чтении:


mem   (2010-11-24 21:35:00) [29]


> clickmaker ©   (24.11.10 21:30) [13]



ХС присущ и один довольно существенный недостаток: он медленно работает, если индекс фрагментирован: то есть в том случае, если списки слов с одинаковыми сигнатурами разбросаны по несмежным секторам на диске.


а это я не пропустил при первом чтении:

В настоящее время это не является большой проблемой, потому что, с одной стороны, размеры памяти компьютера часто позволяют загрузить словарь целиком, а с другой стороны, дефрагментация словаря, как правило, осуществляется в течении нескольких минут.



> И не смущает, что между софтом и винтом еще куча посредников,
>  влияющих на скорость: API, кэш, дисковый контроллер, наконец?
>

очень, очень смущает, но как избавиться?))


clickmaker   (2010-11-24 21:30:00) [30]

и все-таки непонятно. Неужели разработан такой супермегабыстрый алгоритм поиска по индексу, что малейшее отклонение головки винчестера будет критично? Не пора резюме в MS отправлять в таком случае? )
И не смущает, что между софтом и винтом еще куча посредников, влияющих на скорость: API, кэш, дисковый контроллер, наконец?


mem   (2010-11-24 21:27:00) [31]


> Anatoly Podgoretsky ©   (24.11.10 21:22) [11]
>
> > mem  (24.11.2010 21:19:10)  [10]
>
> А забить и пойти выпить пива или по серьезней.

Серьезно: после выполнения

 hFile := CreateFile(PChar(ExtractFilePath(Application.ExeName) + 'index.dat'),
                 GENERIC_READ or GENERIC_WRITE,
                 FILE_SHARE_READ or FILE_SHARE_WRITE,
                 psa, CREATE_NEW, FILE_FLAG_SEQUENTIAL_SCAN, 0);
есть только запись в MFT и больше ничего, размер его ноль, а после выполнения
 SetFilePointerEx(hFile, SizeOf(THashNode) * RecordCount, CurrHashPos, FILE_END);
 SetEndOfFile(hFile);

уже выделяется место в области для файлов?


Anatoly Podgoretsky   (2010-11-24 21:22:00) [32]

> mem  (24.11.2010 21:19:10)  [10]

А забить и пойти выпить пива или по серьезней.


mem   (2010-11-24 21:19:00) [33]


>  clickmaker ©   (24.11.10 21:16) [9]


>
> SetEndOfFile()

т.е. файла как такового еще не существует?


> не стоит забывать, что могут быть еще процессы-претенденты,
>  горящие желанием записать на свободное место.


упсь, а с ними что делать?


clickmaker   (2010-11-24 21:16:00) [34]

> CreateFile после возвращения дескриптора уже записала файл
> размером 0 в определенное место, так?

SetEndOfFile()


> Т.е. с очень большой вероятностью файл будет дефрагментирован,
> даже при наличии нужного куска

не стоит забывать, что могут быть еще процессы-претенденты, горящие желанием записать на свободное место.


mem   (2010-11-24 21:13:00) [35]


> Она не враг сама себе

это радует)))


> clickmaker ©   (24.11.10 21:09) [6]

а что насчет

> mem   (24.11.10 21:08) [5]

?


mem   (2010-11-24 21:10:00) [36]


> то файл в любом случае будет разбит по кластерам

на кластеры я согласен))


clickmaker   (2010-11-24 21:09:00) [37]

> вот, чтобы ускорить перемещение и считывание и нужен последовательно
> записанный файл

игра не стоит свеч.
в любом случае, если на винте есть свободный кусок в 1Гб, винда постарается записать его без фрагментов. Она не враг сама себе


mem   (2010-11-24 21:08:00) [38]


> CreateFile после возвращения дескриптора уже записала файл
> размером 0 в определенное место

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


mem   (2010-11-24 21:06:00) [39]


> DiamondShark ©   (24.11.10 19:31) [3]


> А вы с какой целью интересуетесь?

 Делаю индексный файл для поиска. Данные тоже в нем лежать будут, вот, чтобы ускорить перемещение и считывание и нужен последовательно записанный файл.
 Средства СУБД мне не подходят.


> если человек хочет странного

Желание ускорить дисковые операции - странное? хм...


> Юрий Зотов ©   (24.11.10 19:15) [1]
>
> Если на диске НЕТ свободного куска нужного размера, то записать
> файл без его фрагментации не получится никак.
>
> А если на диске ЕСТЬ свободный кусок нужного размера, то
> система сама запишет файл без его фрагментации.


сначала я загоняю в него данные из БД - набор записей. Потом создаю и записываю в него же несколько индексов. Заранее его размер мне неизвестен, да даже если и известен(установлю сразу с запасом), то ведь CreateFile после возвращения дескриптора ужезаписала файл размером 0 в определенное место, так? Т.е. с очень большой вероятностью файл будет дефрагментирован, даже при наличии нужного куска. Если я конечно правильно понимаю, как виндовз записывает файлы... Прошу поправить, если ошибаюсь с CreateFile.


DiamondShark   (2010-11-24 19:31:00) [40]


> mem   (24.11.10 16:13) 

А вы с какой целью интересуетесь?

Я почему уточняю? Это уже верный признак: если человек хочет странного, то с вероятностью 93,14159% он пытается решить НЕ ТУ задачу, которую требуется решить на самом деле.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо