Как снизить нагрузку на сервер изменив скрипт?

12 3
S
На сайте с 04.02.2007
Offline
318
svv
1424

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

$bases=file("base.txt"); #забираем базу в массив

foreach($bases as $In) #проходим по каждой строке базы
{
$In = trim($In);
$In = str_replace("\r","", $In);
$In = str_replace("\n","", $In);

list($id, $name, $birth, $ves, $adress) = explode("\t", $In); #разбираем строку

#далее присваиваем значения массивам
$ID[$id] = $id;
$NAME[$id] = $name;
$BIRTH[$id] = $birth;
$VES[$id] = $ves;
$ADRESS[$id] = $adress;

}

Выше приведена упрощенная версия базы. Все для того, чтобы далее можно было организовывать варианты поиска, к примеру по имени, адресу, дате рождения и пр.

Всё отлично работало, пока траффик был минимален и записей в базе несколько сотен. Сейчас в базе 3 тысячи записей и 70-90 тысяч запросов к этой базе в разных вариантах. Хостер ругается на нагрузку :(

Помогите, как можно вышеприведенную конструкцию изменить, чтобы ускорить и, соответственно, снизить нагрузку. Ранее SPLIT был заменен на EXPLODE, что ускорило работу скрипта. Может использовать другие методы чтения текстовой базы? Анализ показывает, что чем больше записывать элементов в массив, тем тормознее скрипт становится. Может формат записи

$NAME[$id] = $name; сменить на что то еще?

PS переход на MySQL прошу не предлагать. Пока в ней разобраться не смог :(

danforth
На сайте с 18.12.2015
Offline
153
#1
svv:
PS переход на MySQL прошу не предлагать. Пока в ней разобраться не смог

Так разберитесь, а мы поможем. База данных для этого и создана - чтобы хранить данные. Там не сложно.

P.S. 3 тысячи записей для базы - смех.

Junior Web Developer
Оптимизайка
На сайте с 11.03.2012
Offline
396
#2

Replace your homegrown data layer to any SQL or even NoSQL database.

As a first step, you can move your file (base.txt) to the RAM drive (tmpfs, for example) and refactor it structure to avoid of parsing on each request. For example, by adding flag FILE_IGNORE_NEW_LINES to the file() function, you can avoid str_replace's of EOL and so on.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
S
На сайте с 04.02.2007
Offline
318
svv
#3

Стыдно просить, но по русски можно?

S
На сайте с 04.02.2007
Offline
318
svv
#5

Спасибо :)

А как загонять базу в оперативку на обычном хостинге?

Как ее там обновлять?

Правильно я понимаю, что вышеуказанный фрагмент "ускорить" нельзя?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#6
Выше приведена упрощенная версия базы. Все для того, чтобы далее можно было организовывать варианты поиска, к примеру по имени, адресу, дате рождения и пр.

Попробуйте обработанную версию сохранить в JSON (json_encode) формат в файл. А далее уже брать готовый файл (file_get_contents и json_decode), где не нужен будет цикл.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
R
На сайте с 20.02.2015
Offline
59
#7

memcached

Для чтения из файла строк луче использован fgets, fscanf

D
На сайте с 07.11.2000
Offline
219
#8

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

Просто переводите в данные в php файл с переменными (массивы). Будет намного быстрее, чем загрузка из текстового файла в эти массивы.

vars.php
<?php
$ID[12] = 12;
$NAME[12] = "Имя";
....
?>

Потом, загружайте инклудом.

<?php
...
include 'vars.php';
..
?>

Разумеется, для любой БД нужно всегда фильтровать данные, чтобы не подсунули что-то левое.

S
На сайте с 04.02.2007
Offline
318
svv
#9
rereg:
fgets, fscanf

Спасибо.

Разница есть, но она теряется на фоне этапа сохранения в массивы.

---------- Добавлено 19.10.2016 в 21:26 ----------

Dimka:
Если Вы можете хранить данные только в текстовом файле, а текстовый файл изменяется редко и загружается целиком в переменные.

Знатная идея. Завтра обязательно сравню. Действительно, это ж можно кроном регулярно формировать.

S
На сайте с 30.09.2016
Offline
469
#10
svv:
70-90 тысяч запросов к этой базе в разных вариантах.

Это что, количество посетителей сайта за сутки?

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
12 3

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