include в php большого файла

Алеандр
На сайте с 08.12.2010
Offline
193
#41
Может быть, невнимательно прочитал все ответы, но по искомой задаче: зачем все id хранить в одном файле? У меня полно сайтов-самописов, с похожими задачами, решаю  элементарно - создаю файл с нужным id в структуре папок. Проверка на наличие этого id не требует каких-либо ресурсов, кроме того, чтобы проверить, есть ли такой файл в системе. Причем, если нужно зачем-то отмечать, от кого именно блок этого id - в сам файл записывать эту информацию. На проверку наличия файла это никак не влияет, а если нужна расширенная информация - она есть в самом файле. И, собственно, все.
S3
На сайте с 29.03.2012
Offline
327
#42
Алеандр #:
Может быть, невнимательно прочитал все ответы, но по искомой задаче: зачем все id хранить в одном файле? У меня полно сайтов-самописов, с похожими задачами, решаю  элементарно - создаю файл с нужным id в структуре папок. Проверка на наличие этого id не требует каких-либо ресурсов, кроме того, чтобы проверить, есть ли такой файл в системе. Причем, если нужно зачем-то отмечать, от кого именно блок этого id - в сам файл записывать эту информацию. На проверку наличия файла это никак не влияет, а если нужна расширенная информация - она есть в самом файле. И, собственно, все.

такой вариант обсуждался. Я пока реализовал альтернативный. Высказывались опасения - как себя будет вести файловая система с миллионом файлов, насколько легко это все будет забэкапить. Поделитесь опытом.

Sly32 #:
все id хранить в одном файле?

Не все, разбивается на батчи по первым двум цифрам например и потом поиск идет только в соответсвующем файле

Shelton724
На сайте с 26.05.2011
Offline
263
#43
Sly32 #:
Высказывались опасения - как себя будет вести файловая система с миллионом файлов, насколько легко это все будет забэкапить. Поделитесь опытом.

Про миллион не знаю, но есть у меня один "странный" проект, где файлов больше 400 000 (ну так исторически сложилось), сервер с ним бэкапится примерно за то же время, что и соседний, где файлов в 100 раз меньше, файл бэкапа не раздут.

S3
На сайте с 29.03.2012
Offline
327
#44
Shelton724 #:

Про миллион не знаю, но есть у меня один "странный" проект, где файлов больше 400 000 (ну так исторически сложилось), сервер с ним бэкапится примерно за то же время, что и соседний, где файлов в 100 раз меньше, файл бэкапа не раздут.

Понятно, до этой части я не дошел. Проверю в моем случае как только перепишу скрипт по принципу 1 айпишник - 1 файл. 

А можно поинтересоваться - что значит бэкапить сервер? Что вы именно там бэкапите если базы нет? Имеете ввиду вот эти 400 тыщ?

Алеандр
На сайте с 08.12.2010
Offline
193
#45
Sly32 #:

Высказывались опасения - как себя будет вести файловая система с миллионом файлов, насколько легко это все будет забэкапить. Поделитесь опытом.

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

Т.е., если нет задачи найти искомый id в папке, а уже зная этот id проверить его наличие - это быстро. Если же в задаче, по какой-то причине, нужно делать листинг каталога и потом искать подходящие файлы - вот это будет ооооочень медленно на больших объемах файлов.

Чтобы уменьшить нагрузку на поиск и построение дерева каталогов и файлов - оптимально хранить id не в одной папке, а в нескольких, например id "11112222333" хранить в папке 1/11/, а id "222333444" в папке 2/22. Тут вариантов вложений может быть сколь угодно, сильно зависит от того, какие именно id и группы повторов у них есть, чтобы выбрать оптимальный путь каталогов. Тогда и проблем с построением папок будет значительно меньше, поскольку одна папка будет содержать список не в сотни тыс файлов, а в сотни-тысячи, что позволяет работать гораздо быстрее.

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

Алеандр
На сайте с 08.12.2010
Offline
193
#46
Shelton724 #:

Про миллион не знаю, но есть у меня один "странный" проект, где файлов больше 400 000 (ну так исторически сложилось), сервер с ним бэкапится примерно за то же время, что и соседний, где файлов в 100 раз меньше, файл бэкапа не раздут.

Если вы делаете снапшот всего сервера - разницы не будет, факт. Если же вы делаете бэкап, условно, через tar gzip папки, то 400 000 будут собираться дольше, чем 400 файлов именно в силу того, что нужно значительное время на поштучный обход и добавление каждого файла в архив. По крайней мере, у меня именно так.
Artisan
На сайте с 04.03.2005
Offline
363
#47
NoMoreContent #:
В последнее время меня удивляют типичные реакции людей в интернете. Какое-то тотальное недоверие всех ко всем.

Это тотальная самоуверенность людей в интернете.

Все всё знают, все всё умеют, и дальше по списку.

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
S3
На сайте с 29.03.2012
Offline
327
#48
Алеандр #:
С бэкапом так же проблем нет. Основная проблема тут в том, что, конечно, самих файлов много и будет значительно дольше собираться сам архив, но, кроме этого - никаких трудностей.

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

При правильной организации БД это будет исключено. Роллбэк неправильно транзакции нарантирует что у вас БД будет  D-  устойчивой. Опять же правильно нстроенный бэкап позволяет хранить кучу версий базы на промежуток времени. 

NoMoreContent
На сайте с 14.05.2023
Offline
29
#49
Sly32 #:
 with open(f"file_finder/storage/{filename}") as f:
                data_ip = f.read()
                if data_ip:
                    ip_list = data_ip.split(' ')

Отличный скрипт.
Только вот тут каждый раз происходит чтение всего файла в память, а затем разбивка по пробелам?

В некоторых случаях эффективнее было бы читать построчно файл, где по 1 записи на строку.
Если строка найдена, то прерывать цикл поиска.

with open(filename) as file:
    for line in file:
        print(line.rstrip())

или

with open(filename) as file:
    while line := file.readline():
        print(line.rstrip())

(с) ShadowRanger с SOF
Д
На сайте с 01.04.2012
Offline
142
#50
MySQL(i),memcached,файловая система кэшировать.
VPN/SSD VPS в любой локации на выбор ( https://cp.inferno.name/cart.php ). Скидка 25% для новых заказов по промо-коду ZIMA2024

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий