@phpclubru

Страница 668 из 956
Pavel
25.09.2018
09:16:12
Или это просто изливание души.

Yuriy
25.09.2018
09:24:45
это карма - нефиг парсить ни в чём невинные детские миры

Алихан
25.09.2018
09:28:42
Alexey
25.09.2018
09:33:33
чувак, мы не видим весь код и ошибки которые он вызывает, кроме того у тебя в коде лишняя скобка последняя

Google
Алихан
25.09.2018
09:36:39
Это и есть весь код, сейчас попробую сделать скрин до переполнения памяти.

Pavel
25.09.2018
09:36:59
Это и есть весь код, сейчас попробую сделать скрин до переполнения памяти.
Лучше сделай отладочные вар дампы и найди какие место зацикливается

Алихан
25.09.2018
09:37:18
так там нечему зацикливаться

Pavel
25.09.2018
09:37:50
Значит не зацикливается на самом деле?

Alexey
25.09.2018
09:38:42
то что ты прислал - это объект htmlDOM, и тут всё в каше, установи (linux) включи openServer(windows) расширение xdebug

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

Алихан
25.09.2018
09:39:05
сделаю

Avtandil
25.09.2018
09:46:27
Привет

Может кто нибудь поможет найти решение https://stackoverflow.com/questions/52486442/concurrent-inserts-and-race-condition-in-mysql

Artem
25.09.2018
09:55:57
Может кто нибудь поможет найти решение https://stackoverflow.com/questions/52486442/concurrent-inserts-and-race-condition-in-mysql
обычно чтобы избежать гонки при update используют: 1. атомарные апдейты записей в базе 2. транзакции 3. версионирование схемы при insert хватает простого LOCK TABLES https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html

Avtandil
25.09.2018
09:58:37
Кейс такой, каждый юзер может создать не больше 5 записей в таблице. Я при каждом инсерте делаю COUNT, в одной транзакций, проверяю количество и пишу или бросаю ошибку

Но при большой нагрузке (10K онлай) всёравно пройсходит оверхеды

Google
Artem
25.09.2018
10:01:56
LOCK на чтение?
lock устанавливается как только возникает вероятность внесения изменений, если после чтения возможна запись, то до окончания операции никто не должен обращаться к базе.

Artem
25.09.2018
10:07:32
LOCK хотелось бы избежать. Pre insert триггер не даст гарантию на исключения race condition?
гонка возникает потому, что кто -то обращается к записям до того, как произшло возвращаение результата count и была произведенна новая запись. Триггер -это просто способ не вызывать count каждый раз явно руками, ровно как и хранение отдельно значения записей (но так еще можно вынести логику всей конкурентной работы в код за пределы базы). И нет гаррантии никакой не будет, просто возможно будет видимость работы, поскольку отрабатывать начнет быстрей, хотя не факт, я понятия не имею как mysql обрабатывает запросы

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

Pavel
25.09.2018
10:11:05
Может кто нибудь поможет найти решение https://stackoverflow.com/questions/52486442/concurrent-inserts-and-race-condition-in-mysql
У тебя получается что один пользователь может послать параллельно 2 запроса, например 5 и 6 запись?

dypa
25.09.2018
10:11:40
Artem
25.09.2018
10:13:28
LOCK на чтение тоже?
да, а в чем проблема то, данные же должны возвращаться из кеша а не напрямую из базы. Даже если и есть какая -то задержка -то она идет в фоновом потоке и просто по мере выполнения обновляется результат. Главное не блокировать интерфейс пользователя.

просто важно чтобы эти самые фоновые операции были между собой синхронизированны и дожидались своей очереди на исполнение, ну и обновление должно приходить всем.

Pavel
25.09.2018
10:16:53
Да
Тебе нужен даже не lock а семафор, чтобы в критическую секцию мог войти только один поток. Не знаю как ты в mysql поставишь lock на количество записей, т.е. на еще не созданные строки. Но это сделать легче если ты будешь лочить запись пользователя например.

Лочишь запись в users WHERE userid=$id на чтение и запись, потом идешь считаешь строки, вставляешь туда если нужно, отпускаешь лок. Второй поток не сможет зайти в это место пока первый полностью не отработал.

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

Avtandil
25.09.2018
10:19:27
Что бы вы лучше поняли, система эта LMS, 10K студент заходят и выбиряют группы. У группы есть лимиты на количество учеников. На пример 40. То есть только 40 человек может выбирать эту группу

Вот, в таблие choices у меня есть user_id и group_id

Pavel
25.09.2018
10:20:37
А, так тебе тогда нужно лочить group_id а не пользователя

Google
Avtandil
25.09.2018
10:21:16
Пойду почитать доки ?

Artem
25.09.2018
10:21:26
и насколько часто появляются новые группы и студенты пытаются в них записаться?

Pavel
25.09.2018
10:22:04
Ты можешь залочить строку с группой в таблице, но тогда будут подвисать все остальные операции которые включают в себя чтение группы. Лучше наверно сделать отдельную таблицу под лок групп.

Pavel
25.09.2018
10:22:30
Либо как я уже сказал в редисе ставить лок или в другом быстром хранилище

Artem
25.09.2018
10:22:48
мне кажется куда проще в группу добавить обект "свободные_места" и следить за его состоянием. обновлять его будет куда проще.Можно даже промежуточное состояние добавть, типа "забронированно_но_может_освободится"

Avtandil
25.09.2018
10:23:02
Pavel
25.09.2018
10:23:37
https://redis.io/topics/distlock

Artem
25.09.2018
10:24:16
Как это поможет и чем отличается от COUNT?
тем что это доступно для всех клиентов и не нужно 10к раз идти и вызывать count

Avtandil
25.09.2018
10:24:45
https://redis.io/topics/distlock
Это зависит от имплементации клиента редиса. Можешь поподробнее сказать о варианте с MySQL lock?

Avtandil
25.09.2018
10:26:02
тем что это доступно для всех клиентов и не нужно 10к раз идти и вызывать count
Тогда лучше добавить отдельную таблицу. Не хочется обновлять таблицу группы, он лежит в кеше

Pavel
25.09.2018
10:26:43
Можешь об этом по подробнее?
Ну у тебя есть отдельная таблица для локов группы. Когда у тебя начинается код который добавляет запись студента в группу, ты делаешь $mysql->lockOrWait($lockTable, $groupId);

Если блокировки нет, то ты ставишь ее и входишь дальше в код добавления записи. А если блокировка от предыдущего запроса есть, то ты ждешь пока предыдущий не отработает.

Потом в конце кода делаешь $mysql->releaseLock($groupId);

Алихан
25.09.2018
10:27:42
Artem
25.09.2018
10:29:10
Тогда лучше добавить отдельную таблицу. Не хочется обновлять таблицу группы, он лежит в кеше
можно просто поле добавить с возможностью хранения null и начать его обновлять, но не завязываться на ней. Через пару месяцев кеш перестроится и можно добавить больше логики )

Avtandil
25.09.2018
10:30:13
Ясно, спасибо друзья. Значит без LOCK никак

Пойду покурью доки ?

Google
Admin
ERROR: S client not available

Artem
25.09.2018
10:36:24
Ясно, спасибо друзья. Значит без LOCK никак
вообще я бы добавил даже не колличество мест свободных, а просто boolean поле. И можно даже в отдельную таблицу вынести и привязать к ней монитор. База будет работать по старому но монитор лочится и клиент если не может его захватить просто ждет и ничего не делает

Artem
25.09.2018
10:37:45
shared же чтение позволяет и по сути с монитором его можно использовать, но ограничивать запись

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

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

Pavel
25.09.2018
10:39:57
~Nyctophobe
25.09.2018
10:42:45
Ребят кто шарит в композере? Я подменил репозиторий пакета на свой, но его зависимости не хотят дружить: - netpromotion/profiler v1.3.0 conflicts with tracy/tracy[dev-master]. - netpromotion/profiler v1.4.0-rc1 conflicts with tracy/tracy[dev-master]. - netpromotion/profiler v1.4.0-rc2 conflicts with tracy/tracy[dev-master].

Alexey
25.09.2018
11:02:53
подменил репу на свою - у вас установлен satis?

Pavel
25.09.2018
13:45:52
Кто-то сталкивался в аджиле и камбане с такой известной социальной багой что небольшое количество задач растягивается на все время спринта?

Pavel
25.09.2018
13:47:09
У нас постоянно остается куча тикетов в несделанных - открытых, в процессе разработки, и в процессе тестирования. Но если предложить на следующий спринт допустим взять не столько же тикетов а в 3 раза меньше, то они все равно не успеются все сделать.

У нас 52 тикета не сделаны и 61 сделан :)

ILIYA
25.09.2018
13:59:19
господа, дайте совет

Error: Did not receive valid response from server XHR response code: 500 XHR responseText: undefined jQuery status: error

получаю при нажатии на кнопку

где копать начинать в каком логе

Pavel
25.09.2018
14:00:51
Это же ответ от сервера 500 ? Там в логах и смотри

ILIYA
25.09.2018
14:01:41
нету.....вот реально нет..поэтому и написал...

Pavel
25.09.2018
14:02:47
undefined jQuery так может jquery объекта не существует?

Google
Yuriy
25.09.2018
14:20:58
Смотри консоль браузера, сетевой трафик, идёт ли обращение и если да, посмотри ответ в raw. Если есть обращение к серверу, то как минимум должна быть запись в access.log (ну если апач). Если есть в access, но нет в error и при этом сервак даёт 500, то скорее всего лог ошибок настроен криво.

Lusive
25.09.2018
17:40:32
if ( $rowCount == 0) { echo 'Записей нет. Совсем нет'; }

if (mysql_num_row($select ) == 0)

Время
26.09.2018
07:18:27
Подскажите если кто в курсе, чем в винде можно 100 гигабайтный файл почистить от повторяющихся строк? (дублей). EmEditor и TextPad его не берут.

next
26.09.2018
07:21:30
загрузись с флешки с убунтой и awk|sed|grep тебе в помощь

viktor
26.09.2018
13:02:24
подскажите плс как убрать перезагрузку в этом коде

Alexey
26.09.2018
13:03:13
return $success;

Страница 668 из 956