Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2019 20:21:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

FishHook
что задачу надо описывать во всей её полноте
Вот с чем соглашусь так соглашусь. До сих пор не понял по какому принципу потом выборка файла осуществляется (последовательная, случайная, групповая или по одному файлу). Насколько сильно у них размер отличается и какой это размер?
FishHook
Во-вторых, ext4 ищет файлы в B-tree
Я все сижу и нахально взращиваю свою лень. Жду когда ктонибудь другой табличку построит, время открытия файла в зависимости от количества файлов в директории для разных файловых систем.
Наверное прийдется победить лень.



Офлайн

#2 Июнь 30, 2019 21:12:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

Прикидка для 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
Видно что реализация деревца разная.



Офлайн

#3 Июнь 30, 2019 21:13:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

FishHook
Во первых, я спрашивал не тебя, а топикстартера, как ты наверное догадался, чтобы намекнуть товарищу, что задачу надо описывать во всей её полноте
ну пардонте, не заметил тега “сарказм”.

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 30, 2019 21:16:16)

Офлайн

#4 Июль 1, 2019 00:11:17

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

а чем sqlite те подходит?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#5 Июль 1, 2019 09:12:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

doza_and
А не могли бы провести аналогичный тестик с Btrfs, у самого нет никакой физической возможности, пишу с планшета



Офлайн

#6 Июль 1, 2019 16:43:08

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

FishHook
Давайте начнём с того, понимаете ли вы как сохранить один файл на диск, а если понимаете, то знаете ли вы как провести эту операцию для N итераций?

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

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

Офлайн

#7 Июль 1, 2019 19:12:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

> Прикидка для ext4

На каком устройстве ФС находилась? На hdd или ssd?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Июль 1, 2019 22:17:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

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

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

Как обычно надо начинать с ТЗ и профилирования. Если нагрузка будет не очень большая можете не морочиться, раскидайте на папки по первой букве имени. Если большая то надо пробовать на вашем железе разные подходы. Группировку запросов к ФС и шардинг еще никто не отменял.



Офлайн

#9 Июль 2, 2019 09:26:31

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

Я быстренько попытался поэксперементировать. ФС на виртуальном диске. Код взят из поста 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

Думаю что нужна методика лучше, ну или как вариант я что то не так делаю.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Июль 2, 2019 09:33:01)

Офлайн

#10 Июль 2, 2019 10:50:34

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

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

Отредактировано ivn (Июль 2, 2019 10:53:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version