Найти - Пользователи
Полная версия: Сохранять большое количество файлов на диск
Начало » Python для новичков » Сохранять большое количество файлов на диск
1 2 3
doza_and
FishHook
что задачу надо описывать во всей её полноте
Вот с чем соглашусь так соглашусь. До сих пор не понял по какому принципу потом выборка файла осуществляется (последовательная, случайная, групповая или по одному файлу). Насколько сильно у них размер отличается и какой это размер?
FishHook
Во-вторых, ext4 ищет файлы в B-tree
Я все сижу и нахально взращиваю свою лень. Жду когда ктонибудь другой табличку построит, время открытия файла в зависимости от количества файлов в директории для разных файловых систем.
Наверное прийдется победить лень.
doza_and
Прикидка для ext4
 data=b" "*1024*128
def nm(i):
    return f"dat/fil{i:05d}.dat"
def timing():
    t0=time.perf_counter()
    for i in range(100):
        fnm = nm(i)
        with open(fnm,"rb") as f:
            res=f.read()
    t1=time.perf_counter()
    return t1-t0
100 0.007317231000342872
200 0.009040447999723256
400 0.007314716000109911
800 0.0075293419940862805
1600 0.008200455995392986
3200 0.008313319995068014
6400 0.008287339005619287
12800 0.13485471499734558
25600 0.16891465200023958
51200 0.1359187190028024
102400 0.15426565799862146

те больше 10к лучше не надо.
 f5 = h5py.File("x.h5","w")
def timing():
    t0=time.perf_counter()
    for i in range(100):
        fnm = nm(i)
        res = f5[fnm][...]
    t1=time.perf_counter()
    return t1-t0
100 0.035453856995445676
200 0.036344066000310704
400 0.036448270999244414
800 0.034665200000745244
1600 0.036391139998158906
3200 0.03649178300111089
6400 0.03843339499871945
12800 0.03834176199598005
25600 0.03748207200260367
51200 0.03952697899512714
102400 0.03816127800382674
Видно что реализация деревца разная.
PEHDOM
FishHook
Во первых, я спрашивал не тебя, а топикстартера, как ты наверное догадался, чтобы намекнуть товарищу, что задачу надо описывать во всей её полноте
ну пардонте, не заметил тега “сарказм”.

FishHook
Во-вторых, ext4 ищет файлы в B-tree
Вобще щас трудно найти ФС из современных где поиск идет тупо перебором..
B-tree не панацея, оно просто увеличивает критическое количество файлов.
Именно это я и имел ввиду говоря:
PEHDOM
… используться разные алгоритмы для оптимизации и ускорения поиска, но помогает это ровно до какогото определенного количества, а потом, все равно начинаеться замедление работы…
…Сейчас считается такое количество равным порядка 10К. по крайней мере для наболее распрострянненых NTFS и extfs.
+ там ведь затык не только в времени поиска, у каждой фС свои таркакны, В NTFS например отключение 8.3 имен, а в ext4 -noatime при монтировании до определенного момента позволяет ускорить операции с файлами, но не думаю что нужно их все перечислять в данном случае.

AD0DE412
а чем sqlite те подходит?
FishHook
doza_and
А не могли бы провести аналогичный тестик с Btrfs, у самого нет никакой физической возможности, пишу с планшета
ivn
FishHook
Давайте начнём с того, понимаете ли вы как сохранить один файл на диск, а если понимаете, то знаете ли вы как провести эту операцию для N итераций?

-)) можно начать с более простого, понимаю ли я как резать хлеб, если понимаю, то как это сделать несколько раз, что бы всем хватило )))

если по дело, то нужно будет все это читать, для работы web сервера
Rodegast
> Прикидка для ext4

На каком устройстве ФС находилась? На hdd или ssd?
doza_and
Rodegast
На hdd или ssd?
hdd 7200rpm это очень старенькая машинка Intel 2.66 ГГц. Сейчас куча дел. Попозже посмотрю что на ssd. там время поиска конечно принципиально другое, боюсь что тест надо будет на сях писать.

ivn
то нужно будет все это читать, для работы web сервера

Как обычно надо начинать с ТЗ и профилирования. Если нагрузка будет не очень большая можете не морочиться, раскидайте на папки по первой букве имени. Если большая то надо пробовать на вашем железе разные подходы. Группировку запросов к ФС и шардинг еще никто не отменял.
JOHN_16
Я быстренько попытался поэксперементировать. ФС на виртуальном диске. Код взят из поста doza_and. Результаты такие
 EXT4
100 0.0017139660003522295
200 0.0019179170003553736
400 0.00383644599969557
800 0.005781635999483115
1600 0.012102871000024606
3200 0.024184380999940913
6400 0.048728272999142064
12800 0.10079301699988719
25600 0.1980864200004362
51200 0.43505316199934896
102400 0.846539980999296
Btrfs
100 0.0018997739989572437
200 0.0020562169993354473
400 0.003451447000770713
800 0.007405072999972617
1600 0.014437578000070062
3200 0.026141733998883865
6400 0.05507117400156858
12800 0.13088511299974925
25600 0.28273646799971175
51200 0.48964048300149443
102400 1.0950165480007854
XFS
100 0.0014155379994917894
200 0.001995603000978008
400 0.002913852000347106
800 0.00583976500092831
1600 0.012174425999546656
3200 0.024978338999062544
6400 0.0702129410001362
12800 0.12122568500126363
25600 0.225585627998953
51200 0.4428712689987151
102400 0.9084450480004307

Думаю что нужна методика лучше, ну или как вариант я что то не так делаю.
ivn
doza_and
нагрузка минимальная
уточню мой вопрос.
есть ли какой нить модуль, метод, в который я бы отправлял имя файла, а он создавал папку (иерархию папок), сохранял файл и возвращал путь до этого файла?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB