![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
дефрагментация файла
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% он пытается решить НЕ ТУ задачу, которую требуется решить на самом деле.