[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нехватка памяти - посоветуйте по оптимизации
kaktus
Добрый день уважаемые программисты
Помогите решить проблемку: есть сайт с посещаемостью около 10 тыс хостов, лежит на ВПС-сервере (CPU: 1200, RAM:740 Mb).
Все пришедшие пользователи в основном занимаются поиском по базе.
База лежит в текстовом файле (CSV), объем файла 25 Мб, количество строк около 250 000 шт, поиск проходит очень просто: при запросе файл загружается в массив и затем по самому простому циклу от первой до последней строки прогоняется и ищутся совпадения - если находятся - то таблично выводятся на экран - т.е. все максимально просто вроде как

в последнее время в "часы пик" когда пользователей много - серверу очень нехватает физической памяти и он ну очень тормозит и переодически полностью "ложится" (в логах пишет PHP fatal error). memory_limit установлен в 128 Мб
нормальная работа сервера востанавливается когда спадает приток посетителей (в ночное, утренне время все отлично)
в данный момент пока проблему решил временным удалением 30% строк из файла данных (но это очень плохой вариант решения)

Подскажите: решит ли проблему выделение дополнительной памяти в настройках ВПС?
И так же есть ли методы оптимизации поиска по файлам такого типа? Возможно было бы правильнее организовать все это в MySQL - но к сожалению я не умею работать с этой базой данных

Заранее спасибо за совет
Invis1ble
Цитата
было бы правильнее организовать все это в MySQL

а не грузить все данные в память каждый раз

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaktus
Цитата (Invis1ble @ 27.02.2013 - 14:18)
Цитата
было бы правильнее организовать все это в MySQL

а не грузить все данные в память каждый раз

Я с Вами совершенно согласен, но к сожалению пока переделывать кардинально не буду, так как достаточных знаний нет в этой области

А что посоветуете в данной ситуации? может есть способы освобождения памяти после проведения операции с загрузкой и поиском?
Invis1ble
можно в memcache засунуть и к нему запросы делать
Совет простой: использовать подходящие для задачи инструменты. "достаточных знаний нет в этой области" - это отмазка, в данном случае нужные знания получаются в течение суток.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Valick
kaktus, ну искать можно и построчно загружая файл, а не целиком.

а вообще учите mysql это в разы проще чем работа с файлами
уж если вы по массиву ищите совпадения, то в базу запрос написать это 5 секунд smile.gif
вас никто не заставляет с первой же секунды обучения писать трехэтажные запросы.

_____________
Стимулятор ~yoomoney - 41001303250491
kaktus
Цитата (Valick @ 27.02.2013 - 14:53)
kaktus, ну искать можно и построчно загружая файл, а не целиком.

а вообще учите mysql это в разы проще чем работа с файлами
уж если вы по массиву ищите совпадения, то в базу запрос написать это 5 секунд smile.gif
вас никто не заставляет с первой же секунды обучения писать трехэтажные запросы.

при построчной загрузке не упадет ли значительно скорость поиска?
и все-таки на счет принудительного освобождения памяти - есть вариант?
а так же еще раз спрошу - если количество доступной памяти на сервере удвоить - будет толк - как думаете?
kaktus
Цитата (Valick @ 27.02.2013 - 14:53)
а вообще учите mysql это в разы проще чем работа с файлами
уж если вы по массиву ищите совпадения, то в базу запрос написать это 5 секунд smile.gif

для меня mysql - это темный дремучий лес - вообще нет никаких навыков работы с ним - стремно сразу вмешиваться в отлаженную работу сайта который вылизывал несколь лет - может сразу не получится
Invis1ble
Цитата
если количество доступной памяти на сервере удвоить - будет толк - как думаете?

будет, но это костыль. Удвоится посещаемость - снова будешь увеличивать лимит? ))

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaktus
Цитата (Invis1ble @ 27.02.2013 - 15:06)
Цитата
если количество доступной памяти на сервере удвоить - будет толк - как думаете?

будет, но это костыль. Удвоится посещаемость - снова будешь увеличивать лимит? ))

значит буду учиться smile.gif
пока удвоили памяти до 1500 мб и процессорное время подняли до 1500 мгц - посмотрим чем это все закончится smile.gif

спасибо за помощь
Игорь_Vasinsky
Цитата
посмотрим чем это все закончится


set_time_limit(0);

for($i=0;$i<99999; $i++){
$temp = null;
$temp = file_get_contents('http://yoursite.com');
}


:ph34r:

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Nikitian
Использовать mysql.
Если поиск осуществляется не по всей строке, то можно собрать индекс и осуществлять поиск по нему. Как-то делал подобие бд на файлах, индексы по полям собирал в отдельные файлы и в случае вхождения этих полей в условие запроса, работал не с данными, а с индексами. Но всё, разумеется, сугубо индивидуально.
kaktus
пока смотрю результаты увеличения мощностей сервера - по статистике в С-Панели нагрузка на сервер упала в среднем в 20 раз - бОльший объем свободной памяти играет очень значительную роль в производительности сервера, так что пока это решение достаточно действенное - есть также вариант перехода на отдельный собственный сервер - там уже памяти будет неограничено

Но код все равно скорее всего буду переделывать - ресурс быстро-растущий и 20-30 тысяч хостов в день "не за горами"
kaktus
пока все работает нормально, но в связи с этим случаем возник вопрос для разработчиков: скажите пожалуйста, какие вы используете сервера и их параметры при такой нагрузке, если например будет обрабатываться база mysql на 250 тыс строк, 20 столбцов информации и такой посещаемости (около 10 тыс хостов), запросов в поиск по базе в сутки примерно 100 тыс

вот одновременное кол-во хостов почситать не знаю как, но для примера - открытых сессий в папке sessions - около 1500 (время жизни стандартное - 24 мин)

т.е. если это все переделать на mysql - небудет ли система еще более перегружена?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.