Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Версия Laravel: 5.5
Версия PHP: 7.0.22
Операционная система и её версия: Linux Mint 18.2 Sonya
Вендор и версия сервера БД: mysql Ver 14.14 Distrib 5.7.21, for Linux
Вендор и версия Веб-сервера: Apache/2.4.18
Медод подключения PHP: libapache2-mod
Задача, что должно происходить _в целом_, техническое задание:
Имеется модель товаров со связями 1-1 к категории и городу.
Необходимо выбрать n случайных записей той же категории, в том же городе, если в городе нет, тогда 4 случайных из той же категории, ну и если вообще нет 4, тогда сколько есть.
Что произошло, текст ошибки, если есть:
Повесил сервак. В логах говорит, что недостаточно памяти для выполнения скрипта.
Варианты/догадки, почему это произошло:
Не оптимизирован запрос, или вообще не верен.
Код:
app\Ad.php
public function related(){
$city_id = $this->city_id;
$cat_id = $this->category_id;
$ads = Ad::where('publish', 1)->where('category_id', $cat_id)->where('id', '!=', $this->id)->inRandomOrder();
if($ads->count() > 4){
$res = $ads->where('city_id', $city_id);
$count = $res->count();
if($count >= 4){
$res = $res->take(4)->get();
}else{
$res = $res->union($ads->take(4-$count))->get();
}
}else{
$res = $ads->get();
}
return $res;
}
Вобщем проблемы была в настройках сессии, а именно
по умолчанию стояло 'secure' => true , поставил false, все заработало.
Так, что если кто столкнется с проблемой - вот...
Вобщем Session::all() возвращает только token.
Посмотрев в storage/framework/sessions, заметил что при каждом запросе создается новый файл сессии.
Подскажите где косяк?
Ну нет, далеко не подобное, это просто аналогичный пример был.
Вообще вот смысл того, что я хочу конкретная задача:
Выполнить одновременно не более 14 запросов и быстро сохранить полученный результат.
Вот собственно и вопрос куда и как.
Ну куда понятно - в сессию.
А вот как?
file - не катит была такая реализация до сего момента, нагрузка высокая, поэтому ОЧЕНЬ сильно падает производительность именно поиска-чтения-записи.
memcached и redis подходит, но трут свои же записи.
Вот как реализовать хз....
Да и еще...
Можно ли в процессе работы использовать и file и memcached сессию?
Ну т.е. как то динамично менять драйвер?
Структура данных - json
Ну если на пальцах то смысл запросов таков:
есть например несколько товаров, вот по ним я делаю запросы.
products.forEach(function(product){
writeInfo(product.name,product.val);
});
function writeInfo(pName, pVal){
$.ajax({
url: 'some.php',
data: {name:pName, val:pVal},
success: callback
});
};
, а на серве записываю для каждого запроса.
Session::put('key_'.Input::get('name'), Input::get('val'));
Вот если взять
Session::get('key_name1');
, то он видит, т.е. записывается все, но если брать после выполнения всех запросов, уже видит только один,
судя по всему, последний выполнившийся.
Во-первых Git - не гнида)) 10000 раз уже мою жопу спасал))
Во-вторых он не решил, что в коде ошибка, а указал на конфликт при мерже или пулле, который сам разрешить не смог.
Такое бывает, когда ты и на тесте и на продакшене делаешь изменения.
Когда получше познакомишься, спасибо ему еще говорить будешь)
Кто-нибудь сталкивался?
Есть у кого готовые наметки?
Вообще нужно решение для следующего, может кто подскажет.
Клиент отправляет на серв 10 ajax'ов, каждый хочет что то дописать в кэш.
Но т.к. скорость выполнения запроса отличается не сильно, очень часто часть инфы переписывает друг друга.
Посоветуете что нить?
Последовательные запросы не эффективные из-за тупого бэкэнда.
Файловый кэш так же не эффективен из-за большой нагрузки на сервер.
Народ, помогайте )
Проект средней нагрузки.
драйвер стоит - native
При просмотре статистики наблюдаю, что 90% времени запроса занимает
Symfony\Component\HttpFoundation\Session\Storage\Proxy SessionHandlerProxy::read()
Время ожидания доходит аж до минуты...
Есть какие-нибудь мысли?
Как ускорить все это дело?