@laravel_pro

Страница 404 из 2014
Евгений
15.03.2017
20:27:04
Файлы кажется

И пакет заюзал для Кеша запросов

Т9 бесит

Stanislav
15.03.2017
20:28:32
я вот не знаю, почему редис так делает. чем меньше chunk, тем больше не попадает в редис. или это чанк виноват )

Google
Stanislav
15.03.2017
20:28:49
я с ним только сегодня познакомился )

Юрий
15.03.2017
20:36:29
я с ним только сегодня познакомился )
попробуй лучше транзакции для таких больших объемов а не чанки

Stanislav
15.03.2017
20:39:59
не понял, в выборке использовать транзакции? DB::transaction ?

Юрий
15.03.2017
20:40:31
у редиса есть транзакции

почему именно пайплайн выбран?

https://redis.io/topics/transactions

на вставке куда большими объемами транзакции отрабатывали идеально ничего не теряя

Stanislav
15.03.2017
20:41:42
изначально было так:

$marks = \DB::connection('infodb')->table('marks')->select('id','status')->get(); \Redis::pipeline(function($pipe) use($marks,$i) { foreach ($marks as $mark) { $i++; $pipe->set($mark->id, $mark->status); } echo $i; });

Юрий
15.03.2017
20:44:19
value сильно большое? сколько весит 1.3 млн id/value примерно?

Stanislav
15.03.2017
20:45:58
db0:keys=1359430,expires=0,avg_ttl=0 used_memory_human:79.01M Но скрипт часто падает, что ему памяти не хватает

лимит у php 1024

Юрий
15.03.2017
20:47:01
в общем в любом случае сколько бы не весило - начинай транзакцию в редис, получай данные чанками с бд, после получения ставь в очередь редиса и при завершении получения данных только делай экзекьют транзакции. ничего не должно упасть на транзакции. а на пайплайне вероятно не успевает все распарсить, хотя конечно маловероятно.

Google
Stanislav
15.03.2017
20:47:02
value integer 1-25\

Юрий
15.03.2017
20:47:28
первый раз вообще слышу чтобы редис что-то терял, при условии что ему это конечно отправляли

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

Stanislav
15.03.2017
20:48:14
ок. спасибо, посмотрю

Проверил, по total_commands_processed видно, что серверу поступило количество команд, равное правильному количесту необходимых записей. (на 2 различается, 103265). А в бд редиса попало только 73173. Буду транзакции пробовать.

Юрий
15.03.2017
20:54:58
интересно. а данные точно уникальные?

Stanislav
15.03.2017
20:55:17
да, идентификатор в бд

c multi и exec тоже самое (

VSKut
15.03.2017
22:00:39


Stanislav
15.03.2017
22:15:42
Нашел проблему. Это chunk виноват.

происходит непонятная вещь, что чанками получается массив с неуникальными значениями.

$redis->multi(); \DB::connection('infodb')->table('marks')->select('id', 'status')->chunk(30000, function ($marks) use (&$redis,& $i, &$ar) { foreach ($marks as $mark) { $ar[] = $mark->id; $i++; $redis->set($mark->id, $mark->status); } echo $i . '<br />'; }); $a = array_unique($ar); echo count($a); echo count($ar); $redis->exec();

НАШЕЛ РЕШЕНИЕ!

Юрий
15.03.2017
22:48:53
?

Stanislav
15.03.2017
22:48:54
Связано ли с тем, что используется postgresql, но chunk нормально работает только с orderby

\DB::connection('infodb')->table('marks')->select('id', 'status')->orderby('id')->chunk(30000, function ($marks) use ($redis, &$i, &$ar) {

вот так нормально чанк отрабатывает и не дает дублией

Кучу времени убил, хорошо хоть решилось. Так что редис не виноват

)))

ему просто дубли скармливались

Google
Stanislav
15.03.2017
22:52:10
жаль в документации это не отражено, нашел на гитхабе )

но это скорее к Postgresql относится: When using LIMIT, it is important to use an ORDER BY clause that constrains the result rows into a unique order

Maxim
16.03.2017
06:58:01
https://tproger.ru/news/summer-2016-was-a-turning-point-in-the-history-of-russian-web-dev/

VSKut
16.03.2017
14:46:13


работал-работал и отвалился

лол

Dmitriy
16.03.2017
14:47:05
Кто-то не умеет в исключения

VSKut
16.03.2017
14:47:25
эм?

это дебагер

и ожил снова

как я люблю эти внешние сервисы

Dmitriy
16.03.2017
14:50:14
Я про разработчиков гугл со своим file_get_content

VSKut
16.03.2017
14:50:42
а, ну это гугл - всё ок

у меня там больше бомбило, что в пакете нет возможности отключить verify_peer

раньше в пыхе дефолтно было офф, потом в более новой версии сделали он

и пошло-поехало

отваливаться всё

хардкод прямо в пакете - наше всё ?

Alexander
16.03.2017
16:01:28
Подскажите можно ли в eloquent вставить вставить в самый конец запроса сырую строку, к примеру OPTION max_matches=50000

F01134H
16.03.2017
16:14:28
добрый вечер дамы и господа

Google
F01134H
16.03.2017
16:14:44
как мне в элоквенте взять только одно поле из строки?

User::where('id')->get('fieldname');?

Rodion
16.03.2017
16:15:19
забыл сказать "окей, гугл"

F01134H
16.03.2017
16:15:47
да в доке слабо описаны атрибуты функций

Rodion
16.03.2017
16:17:33
метод pluck

или value

Admin
ERROR: S client not available

F01134H
16.03.2017
16:18:27
я в том смысле, что обязательно мне всю строку тянуть? Одно поле никак?

Rodion
16.03.2017
16:18:47
кастомный запрос тогда

Dmitriy
16.03.2017
16:20:35
Разве value не рашает проблему ? Как выше ответили

Alexander
16.03.2017
16:20:51
User::select('field')->...;

F01134H
16.03.2017
16:21:04
во

сенкс

Alexander
16.03.2017
16:21:29
pluck уже из коллекции фильтрует

F01134H
16.03.2017
16:33:04
да

ale

op

как задать группе роутов обработчик?

для префильтрации например

SaY_lol_SaY
16.03.2017
21:25:37
Хочу заказать телеграм бота с мордой под ключ, данные которые собирает бот отправлялись на сайт в таблицы. Сколько примерно стоит реализация такого ?

Google
F01134H
16.03.2017
21:27:44
У меня есть ApiController и контроллеры в папке Api/. Как мне сделать, что бы при вызове каждого контроллера в папке /Api этот контроллер наследовался автоматом от ApiController? Знаю что через сервис-контейнер или провайдер как то, но чет не осиляю. Даже с гуглом и документацией

это ж по сути DI получается

вообще впервые с IoC и DI сталкиваюсь

кто ответит дам админку порулить

?

Alexander
17.03.2017
05:32:45
ioc не совсем про это

контейнеры по сути реализуют паттерн реестр, ты вызываешь IocManager::getInstance()

у него есть методы типа set(), get()

и create возможно для создания экземляра класса контейнера

которому передаётся текущий класс и набор аргументов

IocManager::create(get_called_class(), func_get_args());

то что ты описал, больше похоже на какое-то динамическое наследование и это не очень хорошая практика

Алексей
17.03.2017
05:55:35
Если нужны общие методы в каких либо классах можно трейты попробовать

А так согласен с Саней. ПРосто экстендишь какой либо базовый класс для API

F01134H
17.03.2017
09:42:09
но у меня этот класс именно что для бутстраппинга юзается

Страница 404 из 2014