SASGIS - SAS.Планета
View Issue Details
0000977SAS.Планета[All Projects] Хотелкаpublic14-09-2011 10:3110-10-2012 11:50
xyz 
vdemidov 
normalminoralways
closedfixed 
WindowsXPSP3
110418 
120808120808 
0000977: Выделение места под файл перед сохранением
Пока не реализовано хранение тайлов в БД, предлагаю следующую фичу:
выделять необходимое место на диске под файл перед его сохранением. Это поможет избежать фрагментации файла при его сохранении.
сейчас у меня база хранится в томе truecrypt, 16 гиг. занято 53%, из них фрагментированных файлов 27%. это не хорошо.
кэш, тайлы
Issue History
14-09-2011 10:31xyzNew Issue
14-09-2011 10:38vdemidovNote Added: 0003926
14-09-2011 10:38vdemidovStatusnew => feedback
14-09-2011 21:51gpsMaxSummaryвыделение места под файл перед сохранением => Выделение места под файл перед сохранением
14-09-2011 21:51gpsMaxDescription Updatedbug_revision_view_page.php?rev_id=1982#r1982
14-09-2011 21:53gpsMaxNote Added: 0003937
14-09-2011 21:53gpsMaxNote Edited: 0003937bug_revision_view_page.php?bugnote_id=3937#r1984
14-09-2011 21:54gpsMaxTag Attached: тайлы
15-09-2011 06:07TolikNote Added: 0003947
15-09-2011 06:08TolikNote Edited: 0003947bug_revision_view_page.php?bugnote_id=3947#r1986
15-09-2011 06:08TolikNote Edited: 0003947bug_revision_view_page.php?bugnote_id=3947#r1987
15-09-2011 06:10TolikNote Edited: 0003947bug_revision_view_page.php?bugnote_id=3947#r1988
15-09-2011 06:16vdemidovNote Added: 0003948
15-09-2011 06:16TolikNote Edited: 0003947bug_revision_view_page.php?bugnote_id=3947#r1989
15-09-2011 06:17TolikNote Edited: 0003947bug_revision_view_page.php?bugnote_id=3947#r1990
15-09-2011 06:18xyzNote Added: 0003949
15-09-2011 06:18xyzStatusfeedback => new
15-09-2011 06:18TolikNote Added: 0003950
15-09-2011 06:22TolikNote Edited: 0003950bug_revision_view_page.php?bugnote_id=3950#r1992
15-09-2011 06:23TolikNote Edited: 0003950bug_revision_view_page.php?bugnote_id=3950#r1993
15-09-2011 06:24vdemidovNote Added: 0003951
15-09-2011 06:25TolikNote Edited: 0003950bug_revision_view_page.php?bugnote_id=3950#r1994
15-09-2011 06:33vdemidovStatusnew => feedback
15-09-2011 07:20xyzNote Added: 0003953
15-09-2011 07:20xyzStatusfeedback => new
15-09-2011 07:28xyzNote Edited: 0003953bug_revision_view_page.php?bugnote_id=3953#r1996
15-09-2011 07:29xyzNote Edited: 0003953bug_revision_view_page.php?bugnote_id=3953#r1997
15-09-2011 07:49vdemidovNote Added: 0003954
15-09-2011 07:49vdemidovStatusnew => feedback
15-09-2011 08:07xyzNote Added: 0003955
15-09-2011 08:07xyzStatusfeedback => new
15-09-2011 08:49vdemidovNote Added: 0003956
15-09-2011 08:50vdemidovNote Edited: 0003956bug_revision_view_page.php?bugnote_id=3956#r1999
15-09-2011 08:50vdemidovNote Revision Dropped: 3956: 0001998
15-09-2011 10:25vdemidovNote Added: 0003957
15-09-2011 11:28TolikNote Added: 0003960
15-09-2011 11:32xyzNote Added: 0003961
15-09-2011 17:15gpsMaxNote Added: 0003967
20-09-2011 08:23vdemidovStatusnew => resolved
20-09-2011 08:23vdemidovFixed in Version => 120808
20-09-2011 08:23vdemidovResolutionopen => fixed
20-09-2011 08:23vdemidovAssigned To => vdemidov
20-09-2011 08:23vdemidovProduct Version.Nightly => 110418
20-09-2011 08:23vdemidovTarget Version => 120808
20-09-2011 10:27TolikNote Added: 0003978
20-09-2011 10:44vdemidovNote Added: 0003979
21-09-2011 05:37ParasiteNote Added: 0003983
21-09-2011 05:58TolikNote Added: 0003985
21-09-2011 06:56vdemidovNote Added: 0003986
21-09-2011 07:07TolikNote Added: 0003988
21-09-2011 08:29ParasiteNote Added: 0003989
21-09-2011 10:09TolikNote Added: 0003990
21-09-2011 10:23vdemidovNote Added: 0003991
21-09-2011 19:46gpsMaxTag Attached: кэш
10-10-2012 11:50TolikStatusresolved => closed

Notes
(0003926)
vdemidov   
14-09-2011 10:38   
И чем это поможет? Одиночные тайлы в любом случае пишутся на диск за один раз.
(0003937)
gpsMax   
14-09-2011 21:53   
Ни разу это не поможет - каждый мелкий тайл с высокой вероятностью пишется непрерывно и не фрагментируется, а каких-то больших там и нет. Нет, потому что ж на картосервисах всё под веб оптимизировано.

Хотя у меня трукриптовский том тоже жестоко фрагментирован. Загадка.

(0003947)
Tolik   
15-09-2011 06:07   
(edited on: 15-09-2011 06:17)
Так это проблема трукрипта. Он, наверно, постоянно шифрует данные, переписывает их с места на место, не знаю.

Если говорить о записи тайлов на диск САС.Планетой, то тут ничего улучшить невозможно: большинство тайлов помещаются в один кластер и фрагментироваться не могут никак.

Предлагаю закрыть.

P.S. Хотя встречаются тайлы размером 100 КБ и больше, но нечасто.
P.P.S. В моём кэше самый большой тайл - 148 КБ (Bing Map), занимает целых 3 кластера по 64 КБ.

(0003948)
vdemidov   
15-09-2011 06:16   
Ну я с самого начала собирался закрывать, но вдруг у кого полезные замечания есть.
(0003949)
xyz   
15-09-2011 06:18   
при чём тут трукрипт?
система видит его как NTFS, и работает с ним соответственно. а что там шифруется - NTFS не важно. я сегодня поиграюсь с этой темой, не закрывайте пока.
(0003950)
Tolik   
15-09-2011 06:18   
(edited on: 15-09-2011 06:25)
И какой там размер кластера?
P.S. Сам проверил: такой же, как на обычном диске, задаётся при создании тома.

(0003951)
vdemidov   
15-09-2011 06:24   
В данном случае фрагментация файлов зависит исключительно от действий ОС и особенностей ФС. Программа не изменяет файлов, а только может удалить или записать файл. Операция выполняется за одно действие.
(0003953)
xyz   
15-09-2011 07:20   
(edited on: 15-09-2011 07:29)
NTFS Information Dump V1.01
Copyright (C) 1997 Mark Russinovich
http://www.sysinternals.com
Volume Size
-----------
Volume size : 16383 MB
Total sectors : 33553919
Total clusters : 33553919
Free clusters : 15497835
Free space : 7567 MB (46% of drive)

Allocation Size
----------------
Bytes per sector : 512
Bytes per cluster : 512
Bytes per MFT record : 1024
Clusters per MFT record: 2

а вот что удалось посчитать в экселе, правда он всосал только 64к строк, но начиная с самых крупных файлов:

Количество.по.полю.1....Fragments.......................................
размер..2.......3.......4.......5...............Общий.итог
15......10861...................................10861
18......8666....134.............................8800
19......8174....214.............................8388
17......6231....114.............................6345
20......4419....253.............................4672
23......2900....595.............................3495
22......2407....466.............................2873
27......1748....300.....659.....................2707
26......1520....323.....791.....................2634
25......1208....322.....878.....................2408
21......1766....352.............................2118
28......1177....198.....500.....................1875
16......1471....78..............................1549
24......499.....523.....420.....................1442
29......657.....154.....222.....................1033
31......750.....61......106.....................917
30......665.....100.....141.....................906
35......273.............5.......3...............281
34......248.....2.......7.......4...............261
33......189.....18......17......18..............242
32......109.....31......73......13..............226
36......192.............2.......................194
39......180.....................................180
38......137.....................................137
37......96......................................96
43......84......................................84
42......67......................................67
44......65......................................65
47......63......................................63
51......47......................................47
41......47......................................47
46......46......................................46
50......44......................................44
67......40......................................40
55......40......................................40
45......29......................................29
59......27......................................27
52......25......................................25
54......23......................................23
62......22......................................22
49......22......................................22
58......21......................................21
63......19......................................19
60......15......................................15
68......13......................................13
66......12......................................12
71......11......................................11
53......11......................................11
70......8.......................................8
65......8.......................................8
40......8.......................................8
57......7.......................................7
83......6.......................................6
75......6.......................................6
74......6.......................................6
69......6.......................................6
61......6.......................................6
79......5.......................................5
48......4.......................................4
86......3.......................................3
132.....2.......................................2
87......2.......................................2
81......2.......................................2
76......2.......................................2
142.....1.......................................1
141.....1.......................................1
127.....1.......................................1
125.....1.......................................1
122.....1.......................................1
118.....1.......................................1
115.....1.......................................1
113.....1.......................................1
95......1.......................................1
94......1.......................................1
93......1.......................................1
92......1.......................................1
91......1.......................................1
90......1.......................................1
88......1.......................................1
84......1.......................................1
82......1.......................................1
78......1.......................................1
77......1.......................................1
73......1.......................................1
Ог......57437...4238....3821....38..............65534

(0003954)
vdemidov   
15-09-2011 07:49   
И?
(0003955)
xyz   
15-09-2011 08:07   
планета на паскале писана, на сколько я помню.
вот такой код создаёт нефрагментированный файл в томе трукрипта размером в 1 гиг.

   assign ( f1,paramstr(1));
   rewrite (f1);
   Seek(f1,size-1);
   Write(f1,temp);
   close (f1);
(0003956)
vdemidov   
15-09-2011 08:49   
(edited on: 15-09-2011 08:50)
Используется TFileStream.

(0003957)
vdemidov   
15-09-2011 10:25   
Обдумал. Возможно и имеет смысл. Нужно внимательнее изучить исходники TFileStream и почитать про операции с файлами в винде.
(0003960)
Tolik   
15-09-2011 11:28   
...и поскорее придумать кэш в виде больших файлов ;)
Может сделать как в МЯК? Сваливать много тайлов в один файл с индексом в начале?
(0003961)
xyz   
15-09-2011 11:32   
проще в SQLite хранить, но это к данному тикету не относится :)
(0003967)
gpsMax   
15-09-2011 17:15   
xyz, согласен и с тем, что с точки зрения системы это обычный том NTFS, и с тем, что размер кластера лучше выставлять минимально возможный, 512 байт, чтобы не терять место на хвостах файлов. Так что фрагментация вполне возможна.
(0003978)
Tolik   
20-09-2011 10:27   
vdemidov, а как именно fixed?
(0003979)
vdemidov   
20-09-2011 10:44   
Именно так и fixed. Сначала ставим файу нужный размер, а уже затем пишем содержимое. Еще добавил Lock'и при записи и чтении файлов, а то поток обновляющий изображение на экране успевал прочитать тот мусор, который появлялся при создании файла, но до записи данных качалкой.
(0003983)
Parasite   
21-09-2011 05:37   
>ничего улучшить невозможно: большинство тайлов помещаются в один кластер и фрагментироваться не могут никак.
Именно что как раз в этом режиме и остаются незаполненные хвосты между концом файла и концом кластера. При этом чем меньше файлы - тем длиннее хвосты, и соответственно больше потеря места на диске.

Решение (не сасовское - т.е. по сути костыль): использовать ФС Reiser, оная позволяет писать более 1 файла в один кластер. Грабли: в винде поддерживается лишь слегка больше чем никак - посторонним любительским драйвером, только на чтение, и без учета журнала. :( Ставьте таки ОСЬ в виртуалку, делайте контейнер в оной, и расшаривайте его для САСа по сетке. :)
(0003985)
Tolik   
21-09-2011 05:58   
> Ставьте таки ОСЬ в виртуалку, делайте контейнер в оной, и расшаривайте его для САСа по сетке

А можно чуть более пошаговую инструкцию?
(0003986)
vdemidov   
21-09-2011 06:56   
Давайте не путать фрагментацию файлов и потери на кластерах. С первым еще как-то можно попробовать бороться, что и сделано, то вот со вторым САС.Планета точно ничего сделать не может это уровень ОС и ФС.
(0003988)
Tolik   
21-09-2011 07:07   
> САС.Планета точно ничего сделать не может
Может-может, но это тема другой хотелки (про кэш в виде БД).
(0003989)
Parasite   
21-09-2011 08:29   
>А можно чуть более пошаговую инструкцию?
Ну конечно можно!

>Давайте не путать фрагментацию файлов и потери на кластерах. С первым еще как-то можно попробовать бороться, что и сделано, то вот со вторым САС.Планета точно ничего сделать не может это уровень ОС и ФС.
Так и фрагментация - это тоже уровень ОС и ФС. И даже pre-allocated space не спасет - логически выделенное перед началом записи "монолитное" пространство не обязательно будет таковым на физическом уровне на диске, и чтобы было таки хоть как-то ЧЕСТНО без фрагментации - надо уже после создания файла его тупо дефражить а-ля программа-дефрагментатор, а уж только потом говорить пользователю "Готово, хозяин!". И то гарантии не будет - иногда физически невозможно задефражить большой файл абсолютно без разбиений (например когда своб.места на диске мало).

Но это всё, разумеется, бредятина (в плане кодирования в САС). YAGNI. :)

>это тема другой хотелки (про кэш в виде БД).
(нудно) ...а вот как появятся плагины - так Вы сами сможете прикодить что угодно...! ;)
(0003990)
Tolik   
21-09-2011 10:09   
Ммммм.... (мечтательно) плагииины...

Да и вообще при таком большом количестве маленьких файлов фрагментация ни на что не влияет.
Допустим, надо открыть 1000 файлов, из них 100 фрагментирована - состоит из 2-х кластеров. Получается 1100 перемещений считывающей головки вместо 1000 - какая разница? (и это в гипотетическом диске без кэша)
(0003991)
vdemidov   
21-09-2011 10:23   
Ну мое исправление заняло строк 5 так что не жалко. Но согласен, что толку от него чуть.