Оптимизация под большие нагрузки

Статус
В этой теме нельзя размещать новые ответы.
Самый быстрый доступ к информации можно осуществить, если хранить данные в плоских файлах или специальных структурах вроде деревьев или хеш-таблиц. Как вариант - использовать базу ключ-значение типа Berkeley Db (php-функции с префиксом dba_).
 
Нужно разбить большие файлы на много маленьких и в бд.
Хотел бы я посмотреть на такого юзера который будет по 10-30 мб загружать с сайта....
 
немного не так. по 20-30мб файлы надо будет показывать админу. а юзерам- много-много страниц
 
Очень неплохо кеширование сделано в фреймворке Symfony, возможно используя его можно снизить нагрузку на сервер.
 
Очень неплохо кеширование сделано в фреймворке Symfony, возможно используя его можно снизить нагрузку на сервер.
лучше чем zend_cache?) да и вообще xcache решает, а кеширование на фреймворках не на том уровне происходит
 
немного не так. по 20-30мб файлы надо будет показывать админу. а юзерам- много-много страниц

Человек не может читать и обрабатывать такие огромные массивы.
Делите на много маленьких.
Не трати время сделайте именно так, всеравно в этоге будет так.
 
У меня примерно похожая проблема, только усугубленней: 13 млн. записей, 100 Гб база. Выборка без индексов 4 минуты, со сложными индексами 20 сек, но все равно хочется 0.30 сек. хотя бы.

Немного сделав тесты пришел в практически элементарному решению. MySQL именуется ведь реляционной, так что все что мне надо было сделать, так это свою базу "зареляцировать" получше. Тоесть сделать больше елементарных таблиц (тем самым уменьшив их размер и время посика по ним) и больше связей сежду ними. Я упростил основную таблицу по которой делал выборку и все громоздкие записи которые не участвовали ни в каких выборках поразносил по отдельным таблицам. В итоге запросы обрабатываются довольно быстро - 0.08 сек., а основная таблица сократилась со 100 Гб до 500 Мб.

Вобщем советую почитать про "нормализацию баз данных"
 
Вобщем советую почитать про "нормализацию баз данных"
после этого появляются битриксы с 36 таблицами сджойнеными :)

в вашем случае хватило бы правильной расстановки индексов и оптимизации запросов под индексы, возможно добавление парочки галочных столбцов в таблицу.
 
создал счас тестовую таблицу в моей бд, дал ей 4 поля-
id (int,11 автоинкремент)
name (varchar,20)
pr_id (int,4)
used (ENUM переключатель между Y и N)

Сделал цикл
PHP:
for ($x=0; $x<100; $x++) {
	$name=mt_rand(0,12312331213);
	$nami=mt_rand(5,7);
	$link = Connect2DB();
	$query = "INSERT INTO `test` VALUES('0','".$name."','".$namei."','N');";
	mysql_query($query,$link) or die(mysql_error()."<br />\n".$query);
	@mysql_close($link);
}
получился скриптик- 100 раз подряд внести запись в БД. добавить 100 значений. И поставил его на автомат. Как только завершается- тут же запускается. В итоге что. 38 раз он у меня выполнился, затем все зависло(((( Никакая страница локалхоста не открывается, ни на что не реагирует никто. Через минутку ожило, все сайты заработали. ВОт такие проблемы((( Как надо сделать чтобы не возникало такого?

p.s. вообще для теста хотел добавить в бд 500 000 записей, и потом попробовать извлечь из бд. и насколько долго бы вышло. в итоге- дело и до извлечения не дошло. добавил 3800- и повис(
:bc::bc::bc:

upd: счас попробовал снова. добавилось вообще 400 записей и повисло! это ведь ненормально))) А, и подскажите как вывести время исполнения скрипта
 
Как метод борьбы с висящими соединениями можно отключить постоянные подключения php к mysql, хотя это палка о двух концах.

В php.ini параметр mysql.allow_persistent Off.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху