Допустим, требуется модифицировать определённые строки в текстовом файле, а строк в файле может быть очень много. Если потребуется изменить строчку где-то в начале, то придётся каждый раз перезаписывать оставшуюся часть текста после удаляемой строчки, что не есть гуд.
Есть такой вариант: В дополнительном файле перечислять номера удалённых строк (но в файле их оставить) и просто не выводить их. И потом (когда накопится много удалённых строчек), можно будет за один раз удалить эти строчки.
Что бы вы предложили? Понимаю, велосипед и всё это реализовано в СУДБ, но хотелось бы узнать, как следует работать с обычными текс. файлами (с CSV, например).
PHP
Как следует работать с текстовыми файлами?
Тут вопрос в том, насколько много...
Если десятки мегабайт, то он целиком считывается в RAM, модифицируется и целиком же записывается на диск - это будет работать быстро (да даже пара сотен мегабайт на современном железе будет достаточно быстро).
А вот если это десятки гигабайт, то тут действительно придётся как-то оптимизировать.
Если десятки мегабайт, то он целиком считывается в RAM, модифицируется и целиком же записывается на диск - это будет работать быстро (да даже пара сотен мегабайт на современном железе будет достаточно быстро).
А вот если это десятки гигабайт, то тут действительно придётся как-то оптимизировать.
Михаил Зуев
Про считывать весь файл в память - это тебя обманули.
а чем БД не устраивает?
Алексей Киселев
БД устраивает всем.
Если открывать как бинарный файл, то с помощью seek можно перескочить на нужный байт и записать туда что-то или считать, при этом не трогая то, что выше и ниже.
БД по этому принципу и работают.
БД по этому принципу и работают.
Алексей Киселев
А разве такое возможно - не трогая записывать?
Насколько мне известно, происходит перезапись существующих данных при записи в поток.
Насколько мне известно, происходит перезапись существующих данных при записи в поток.
А вас не интересовало, КАК ИМЕННО эти самые СУБД это делают?
Просто 3 варианта:
1. Нарезать большой файл на кучу маленьких
2. Хранить список удалённых/измененных строк отдельно и применять изменения при запросе на нужный диапазон
3. Помечать строки как удалённые в самом файле и периодически устраивать сборку мусора
Можно накидать ещё вариантов. Можно их комбинировать.
Просто 3 варианта:
1. Нарезать большой файл на кучу маленьких
2. Хранить список удалённых/измененных строк отдельно и применять изменения при запросе на нужный диапазон
3. Помечать строки как удалённые в самом файле и периодически устраивать сборку мусора
Можно накидать ещё вариантов. Можно их комбинировать.
че че?.. переписывать? вы с какой планеты? да и функция инклюда есть
Алексей Киселев
Иклюда? А она тут при чём?
Vuqar Bayramov
Тут вопрос в том, насколько много... Если максимальный размер файла - пара сотен мегабайт, то он целиком считывается в RAM, модифицируется и целиком же записывается на диск - это будет работать достаточно быстро.
А вот если это десятки гигабайт, то тут действительно придётся как-то оптимизировать.
А вот если это десятки гигабайт, то тут действительно придётся как-то оптимизировать.
На самом деле, удаление - не основная проблема при работе с текстовым файлом.
Поиск, как бы, происходит куда чаще, чем удаление. И с большим файлом без произвольного доступа у тебя сервер встанет колом от чтения куда раньше, чем от записи.
Так что пили, дядя, свой унылый велосипед для БД дальше.
А нормальные люди будут хранить данные в БД, и получать csv файл только когда он нужен, экспортом из БД.
Поиск, как бы, происходит куда чаще, чем удаление. И с большим файлом без произвольного доступа у тебя сервер встанет колом от чтения куда раньше, чем от записи.
Так что пили, дядя, свой унылый велосипед для БД дальше.
А нормальные люди будут хранить данные в БД, и получать csv файл только когда он нужен, экспортом из БД.
Алексей Киселев
Что плохого в велисипеде, папаш? :)
Так, для забавы можно написать, но лучше пока этим не заниматься, так как я слабо себе представляю, как там ОС хранит файлы на диске.
Для начала, нужно с этим разобраться.
Так, для забавы можно написать, но лучше пока этим не заниматься, так как я слабо себе представляю, как там ОС хранит файлы на диске.
Для начала, нужно с этим разобраться.
Похожие вопросы
- Как правильно деплоить сайт и в частности js/css файлы?
- HTTP://, создание новых файлов на сервере
- Глупый вопрос: зачем нужен бинарный файл и бинарный поток?)
- Загрузка файлов на сервер
- Несколько AJAX запросов на один PHP файл.
- MVC, .php / .tpl ...как должен выглядеть файл с расширением tpl?
- можно ли как-то вывод (echo) перенаправить скажем, в текстовую область textarea?
- А для чего создаётся огромное количество файлов php? Это для удобства ?
- Объясните что за файл php.ini
- Как правильно выбрать хостинг для использования mail() с прикрепленными файлами большого размера (100мб в среднем)?