- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть один файл, уже довольно большой
В нем лежат один за другим много мелких файлов.
Структура типа
filename::filedata::0000323::1245635482
filename2::filedata2::0001323::1245635682
filename3::filedata3::0001323::1245635682
1-й - имя файла. 2-й - сам файл, 3-й количество скачиваний, 4-й - time() последнего скачивания
До этого файл считывался в массив, где в цикле находился нужный файл, строка разбивалась на еще один массив, нужные элементы массива менялись, потом строка-массив склеивалась опять в строку и весь массив склеивался обратно в файл и записывался поверх.
Бывает такое, что в одном треде идет обновление сразу нескольких позиций, поэтому цикл нахождения файла повторяется несколько раз.
Возникла необходимость и память поберечь, и быстрее все делать. Файл может вырасти до гига, а может и больше, а в одном запросе может быть доведется обновлять не один-три, а сто-триста позиций.
Что посоветует уважаемая общественность для решения этой проблемы?
Что посоветует уважаемая общественность для решения этой проблемы?
потратить пару часов и разобраться наконец-то с MySQL.
MySQL умрет.
Надо напрямую в файл.
хм, думаю, вы ошибаетесь )
переходите на БД, они именно для этого и существуют, что б гиговые файлы целиков в память не читать, с последующим построением ассоциативных массивов )
То есть, конвертируйте ваш файл в БД, и дальше работайте уже с ней.
это кто сказал что умрет? 48млн записей и пока еще база живая, поиск долгий правда но терпимо
Тема называется "Чтение и запись данных из очень большого файла".
и помощь ожидается именно по этой теме, а придумывать велосепед может будете где-то в другой?
Не хотел вдаваться в нюансы, но:
1. в первую очередь основное ограничение, что скрипт этот пишется под разных пользователей, и надо чтобы они не возились с его установкой.
2. было сказано, что размер файл будет больше гига. Предлагаете все это хранить в таблице mysql?
3. Возможно, будут сайты, на которых нету mysql, поэтолму надо обойтись файловой системой.
rommer добавил 17.12.2011 в 02:33
да, если кто думает, что ТС незнаком с mysql запросами типа "select & update" то они сильно ошибаются. =))
rommer добавил 17.12.2011 в 03:32
Еще один нюанс для любителей изобретать велосипеды:
таких файлов может быть от одного до безконечности.
Поэтому майэскьюэльный велик отпадает =))
Не устаю постить эту притчу или как это назвать на серч :)
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум - из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится - тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите - лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ!!!
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю!!! А от вас нормального ответа недождёшся!!!
Прохожий: Самое крепкое дерево - дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно!!!
Dreammaker, старожилы качают новую инфо фильтруют и качественную трансферят в бабос при помощи своих аццских машинок... потому и так - отвечать или не отвечать на "коварные" вопросы это личное дело каждого, но ворчат и ругаются на такое только неопытные юзеря.
rommer, конвертите ваш текстовый файл в Базу данных будет легче. но если считаете что БД умрут то можно перевести текстовую информацию в машинный код и написать свой драйвер для его обработки и преобразования в нужный для вас вид.
Вы, двое, вижу, нихрена не читатели, а исключительно писатели.
Повторяю:
1. в первую очередь основное ограничение, что скрипт этот пишется под разных пользователей, и надо чтобы они не возились с его установкой.
2. было сказано, что размер файл будет больше гига. Предлагаете все это хранить в таблице mysql?
3. Возможно, будут сайты, на которых нету mysql, поэтолму надо обойтись файловой системой.
4. таких файлов может быть от одного до безконечности.
Вы, двое, вижу, нихрена не читатели, а исключительно писатели.
Повторяю:
Предлагаете все это хранить в таблице mysql?
1 оракл........
2 разбить файл на несколько.... (по алфавиту, по начальным буквам по велечине идентификатора, да как угодно) в зависимости от того как у вас идет выборка
>> 1. база данных РЕЛЯЦИОННАЯ - легко решает вашу проблему. (и mysql в том числе и размер файла тут непричем - всё зависит как вы будете хранить информацию в БД - как разнесете по таблицам, а не тупо все засунете в одну [таблицу] что действительно в данном случае не имеет смысла как таковое)
читайте. [про "реляционную бд mysql"]
filename::filedata::0000323::1245635482
filename2::filedata2::0001323::1245635682
filename3::filedata3::0001323::1245635682
позиция 3 и 4 (повторяющиеся)- это называется в БД "избыточность данных", которая создают лишнюю громоздкость файлу, эту проблему вы легко решите в БД если научитесь правильно разрабатывать структуру. я понимаю что у вас это всего лишь пример но я и не знаю реальной инфо.
да mysql вполне сойдет.
еще раз: задачу надо решить без базы и прочих довесков до пхп.
что скрипт этот пишется под разных пользователей, и надо чтобы они не возились с его установкой.
азбить файл на несколько
Разбить на начальные буквы, это уже на что-то похоже, в смысле "по теме" :D
Но тут один нюанс: если так, то прийдется либо считать все файлы в память, либо постоянно шуршать по всем файлам.
У меня возникла следующая идейка:
к примеру если нужно скачать filename2, то скрипт читает шматками файл, пока не находит то что надо скачать. По мере поиска, встречая остальные файлы, они заносятся в отдельный массив, типа $filearr[]=filename1; $filearrPos[]=позиция_filename1_в_файле();
Соотв. если надо скачать след. файл, то если он уже есть в массиве, то установить указатель и прочесть и записать инфу, а если нет, то продолжить чтение шматками основного файла.
Что кто скажет?
Оговорюсь: вопрос скорее философский, если кто рубит.
Так что велосипедистов с их базами данных настойчивая просьба не беспокоить. :D