
Евгений
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 сталкиваюсь
кто ответит дам админку порулить
?

Евгений
17.03.2017
04:21:42

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
но у меня этот класс именно что для бутстраппинга юзается