169 похожих чатов

Добрый день коллеги! Подскажите какое решение лучше всего сделать обработку

контактов в БД пакетно, по очереди, в многопотоке. Какие есть бест практик решения? У меня одна БД mysql и несколько серверов php5 которые обращаются к БД. Выборка по часовому поясу

3 ответов

20 просмотров

Вопрос требует конкретизации. Пока это сферический конь в вакууме

Py- Автор вопроса
Slava Rozhnev SQLtest.online https://phpize.online
Вопрос требует конкретизации. Пока это сферический...

Нужно вытаскивать из БД контакты пачками условно по 100, помечать что они в обработке, обрабатывать (по мере обработки, тут же помечать контакты что обработаны) и забирать следующую пачку. Проблема нарисовалась когда я попытался с двух серверов брать пачками, первый сервер не всегда успевал пометить "в обработке" из-за этого второй сервер иногда забирал те что уже в обработке.

Py
Нужно вытаскивать из БД контакты пачками условно п...

если вы уж ступили на опасную дорожку реализации очередей на БД, а не через сервер очередей, то надо понимать, что для реализации очереди необходимы какие-то примитивы синхронизации, позволяющее наше многопоточное приложение избавить от гонки состояний - ситуации, когда кто-то что-то не успел обновить. лично я реализовываю очереди на БД так: воркер (процесс, делающий работу - берущий из очереди что надо сделать и складывающий куда-нибудь результат) идёт по такому алгоритму: - берёт какой-нибудь айдишник worder_id - делает выборку записей из таблицы с условием status=fresh, в транзации с SELECT .. FOR UPDATE. Это блокирует строки пессиместично - другие воркеры в это же время выбирающие строки будут ждать. - обновляет выбранные строки, ставя им status=working, worder_id=123, taken_at=NOW() - завершает транзакцию всё, после этого никакой другой воркер не возьмет эти строки, так как они больше не подходят под условие (если после транзакции) или они заблокированы (во время транзакции). теперь можно выполнять работу и обновлять строки. я обычно делаю чтобы воркеры брали строки по одной или небольшими партиями. а также слежу за временем выполнения скрипта и "отпускаю" строки если скрипт не укладывается в ожидаемое время.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
9
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта