View Issue Details

IDProjectCategoryView StatusLast Update
0000977SAS.ПланетаХотелка / Feature requestpublic10-10-2012 11:50
Reporterxyz Assigned Tovdemidov  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version110418 
Target Version120808Fixed in Version120808 
Summary0000977: Выделение места под файл перед сохранением
DescriptionПока не реализовано хранение тайлов в БД, предлагаю следующую фичу:
выделять необходимое место на диске под файл перед его сохранением. Это поможет избежать фрагментации файла при его сохранении.
Additional Informationсейчас у меня база хранится в томе truecrypt, 16 гиг. занято 53%, из них фрагментированных файлов 27%. это не хорошо.
Tagsкэш, тайлы

Activities

vdemidov

14-09-2011 10:38

manager   ~0003926

И чем это поможет? Одиночные тайлы в любом случае пишутся на диск за один раз.

gpsMax

14-09-2011 21:53

manager   ~0003937

Last edited: 14-09-2011 21:53

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

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

Tolik

15-09-2011 06:07

manager   ~0003947

Last edited: 15-09-2011 06:17

Так это проблема трукрипта. Он, наверно, постоянно шифрует данные, переписывает их с места на место, не знаю.

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

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

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

vdemidov

15-09-2011 06:16

manager   ~0003948

Ну я с самого начала собирался закрывать, но вдруг у кого полезные замечания есть.

xyz

15-09-2011 06:18

reporter   ~0003949

при чём тут трукрипт?
система видит его как NTFS, и работает с ним соответственно. а что там шифруется - NTFS не важно. я сегодня поиграюсь с этой темой, не закрывайте пока.

Tolik

15-09-2011 06:18

manager   ~0003950

Last edited: 15-09-2011 06:25

И какой там размер кластера?
P.S. Сам проверил: такой же, как на обычном диске, задаётся при создании тома.

vdemidov

15-09-2011 06:24

manager   ~0003951

В данном случае фрагментация файлов зависит исключительно от действий ОС и особенностей ФС. Программа не изменяет файлов, а только может удалить или записать файл. Операция выполняется за одно действие.

xyz

15-09-2011 07:20

reporter   ~0003953

Last edited: 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

vdemidov

15-09-2011 07:49

manager   ~0003954

И?

xyz

15-09-2011 08:07

reporter   ~0003955

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

   assign ( f1,paramstr(1));
   rewrite (f1);
   Seek(f1,size-1);
   Write(f1,temp);
   close (f1);

vdemidov

15-09-2011 08:49

manager   ~0003956

Last edited: 15-09-2011 08:50

Используется TFileStream.

vdemidov

15-09-2011 10:25

manager   ~0003957

Обдумал. Возможно и имеет смысл. Нужно внимательнее изучить исходники TFileStream и почитать про операции с файлами в винде.

Tolik

15-09-2011 11:28

manager   ~0003960

...и поскорее придумать кэш в виде больших файлов ;)
Может сделать как в МЯК? Сваливать много тайлов в один файл с индексом в начале?

xyz

15-09-2011 11:32

reporter   ~0003961

проще в SQLite хранить, но это к данному тикету не относится :)

gpsMax

15-09-2011 17:15

manager   ~0003967

xyz, согласен и с тем, что с точки зрения системы это обычный том NTFS, и с тем, что размер кластера лучше выставлять минимально возможный, 512 байт, чтобы не терять место на хвостах файлов. Так что фрагментация вполне возможна.

Tolik

20-09-2011 10:27

manager   ~0003978

vdemidov, а как именно fixed?

vdemidov

20-09-2011 10:44

manager   ~0003979

Именно так и fixed. Сначала ставим файу нужный размер, а уже затем пишем содержимое. Еще добавил Lock'и при записи и чтении файлов, а то поток обновляющий изображение на экране успевал прочитать тот мусор, который появлялся при создании файла, но до записи данных качалкой.

Parasite

21-09-2011 05:37

administrator   ~0003983

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

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

Tolik

21-09-2011 05:58

manager   ~0003985

> Ставьте таки ОСЬ в виртуалку, делайте контейнер в оной, и расшаривайте его для САСа по сетке

А можно чуть более пошаговую инструкцию?

vdemidov

21-09-2011 06:56

manager   ~0003986

Давайте не путать фрагментацию файлов и потери на кластерах. С первым еще как-то можно попробовать бороться, что и сделано, то вот со вторым САС.Планета точно ничего сделать не может это уровень ОС и ФС.

Tolik

21-09-2011 07:07

manager   ~0003988

> САС.Планета точно ничего сделать не может
Может-может, но это тема другой хотелки (про кэш в виде БД).

Parasite

21-09-2011 08:29

administrator   ~0003989

>А можно чуть более пошаговую инструкцию?
Ну конечно можно!

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

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

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

Tolik

21-09-2011 10:09

manager   ~0003990

Ммммм.... (мечтательно) плагииины...

Да и вообще при таком большом количестве маленьких файлов фрагментация ни на что не влияет.
Допустим, надо открыть 1000 файлов, из них 100 фрагментирована - состоит из 2-х кластеров. Получается 1100 перемещений считывающей головки вместо 1000 - какая разница? (и это в гипотетическом диске без кэша)

vdemidov

21-09-2011 10:23

manager   ~0003991

Ну мое исправление заняло строк 5 так что не жалко. Но согласен, что толку от него чуть.

Issue History

Date Modified Username Field Change
14-09-2011 10:31 xyz New Issue
14-09-2011 10:38 vdemidov Note Added: 0003926
14-09-2011 10:38 vdemidov Status new => feedback
14-09-2011 21:51 gpsMax Summary выделение места под файл перед сохранением => Выделение места под файл перед сохранением
14-09-2011 21:51 gpsMax Description Updated
14-09-2011 21:53 gpsMax Note Added: 0003937
14-09-2011 21:53 gpsMax Note Edited: 0003937
14-09-2011 21:54 gpsMax Tag Attached: тайлы
15-09-2011 06:07 Tolik Note Added: 0003947
15-09-2011 06:08 Tolik Note Edited: 0003947
15-09-2011 06:08 Tolik Note Edited: 0003947
15-09-2011 06:10 Tolik Note Edited: 0003947
15-09-2011 06:16 vdemidov Note Added: 0003948
15-09-2011 06:16 Tolik Note Edited: 0003947
15-09-2011 06:17 Tolik Note Edited: 0003947
15-09-2011 06:18 xyz Note Added: 0003949
15-09-2011 06:18 xyz Status feedback => new
15-09-2011 06:18 Tolik Note Added: 0003950
15-09-2011 06:22 Tolik Note Edited: 0003950
15-09-2011 06:23 Tolik Note Edited: 0003950
15-09-2011 06:24 vdemidov Note Added: 0003951
15-09-2011 06:25 Tolik Note Edited: 0003950
15-09-2011 06:33 vdemidov Status new => feedback
15-09-2011 07:20 xyz Note Added: 0003953
15-09-2011 07:20 xyz Status feedback => new
15-09-2011 07:28 xyz Note Edited: 0003953
15-09-2011 07:29 xyz Note Edited: 0003953
15-09-2011 07:49 vdemidov Note Added: 0003954
15-09-2011 07:49 vdemidov Status new => feedback
15-09-2011 08:07 xyz Note Added: 0003955
15-09-2011 08:07 xyz Status feedback => new
15-09-2011 08:49 vdemidov Note Added: 0003956
15-09-2011 08:50 vdemidov Note Edited: 0003956
15-09-2011 10:25 vdemidov Note Added: 0003957
15-09-2011 11:28 Tolik Note Added: 0003960
15-09-2011 11:32 xyz Note Added: 0003961
15-09-2011 17:15 gpsMax Note Added: 0003967
20-09-2011 08:23 vdemidov Status new => resolved
20-09-2011 08:23 vdemidov Fixed in Version => 120808
20-09-2011 08:23 vdemidov Resolution open => fixed
20-09-2011 08:23 vdemidov Assigned To => vdemidov
20-09-2011 08:23 vdemidov Product Version .Nightly => 110418
20-09-2011 08:23 vdemidov Target Version => 120808
20-09-2011 10:27 Tolik Note Added: 0003978
20-09-2011 10:44 vdemidov Note Added: 0003979
21-09-2011 05:37 Parasite Note Added: 0003983
21-09-2011 05:58 Tolik Note Added: 0003985
21-09-2011 06:56 vdemidov Note Added: 0003986
21-09-2011 07:07 Tolik Note Added: 0003988
21-09-2011 08:29 Parasite Note Added: 0003989
21-09-2011 10:09 Tolik Note Added: 0003990
21-09-2011 10:23 vdemidov Note Added: 0003991
21-09-2011 19:46 gpsMax Tag Attached: кэш
10-10-2012 11:50 Tolik Status resolved => closed
08-08-2025 13:24 zed Category Хотелка => Хотелка / Feature request