Помогите построить логику работы с БД и ее локом (многопоток)

Wide

Client
Регистрация
04.02.2013
Сообщения
944
Благодарностей
252
Баллы
63
на 2КК+ строк тоже быстро. правда кажется баг какой то со временем
Screenshot_295.pngScreenshot_296.png
 

afk

Client
Регистрация
28.11.2016
Сообщения
98
Благодарностей
25
Баллы
18

steopcik

Client
Регистрация
20.07.2010
Сообщения
107
Благодарностей
9
Баллы
18
Для меня самое идеальное решение стал список. Часто нужно работать с акками по кругу, строго по очереди.
Забираем первую строку с удалением, делаем нужную магию и в конец списка добавляем обратно.
Если инстанс упал, добавляем обратно в конец, для некоторых проектов я делаю error.txt, после чего прохожусь по списку и пытаюсь понять, что за ошибку словили эти аккаунты, иногда доходит до КПД шаблона 99%, где 80% это логика на всё что может пойти не так

А базу данных использую для хранения нужной информации

В своё время намучался с много потоком и работой с базой
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
Забираем первую строку с удалением, делаем нужную магию и в конец списка добавляем обратно.
Если инстанс упал, добавляем обратно в конец
лучше делать так
взял строку с акком, и сразу, следующим кубиком, записал его в конец, и уже пофиг на ошибки и падения инстантса. таким образом ничего не потеряется от слова совсем)
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 718
Благодарностей
1 376
Баллы
113
лучше делать так
взял строку с акком, и сразу, следующим кубиком, записал его в конец, и уже пофиг на ошибки и падения инстантса. таким образом ничего не потеряется от слова совсем)
если делать это 2-мя стандартными кубиками то есть вероятность что между ними могут вклиниться данные от другого потока
лучше делать это в C# ... ставить лок и внутри него брать сверху и тут же добавлять в конец. ... всего 3-4 строки кода вместе со скобками
 
  • Спасибо
Реакции: steopcik

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
если делать это 2-мя стандартными кубиками то есть вероятность что между ними могут вклиниться данные от другого потока
обязательно вклинится, но какая разница, ты это должен делать с удалением )

а через шарм, конечно же все лучше делать
 

olek2765

Client
Регистрация
28.12.2018
Сообщения
10
Благодарностей
0
Баллы
1
как взять рандомную строку с статусом свободен, и поменять статус одним запросом
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
  • Спасибо
Реакции: olek2765

steopcik

Client
Регистрация
20.07.2010
Сообщения
107
Благодарностей
9
Баллы
18
ну это просто не логично, для этого нужно 2 запроса...
1й взять
2й изменить
ответ - никак
REDIS очень хорош для таких задач, из минусов, если он упадёт, поскольку он хранит информацию в оперативке данные могут теряться, но есть настройка бэкапа в файл если упадёт он восстановит все из файла , для твоей задачи это идеальное решение.
В нем можно хранить строковые значения, в формате ключь+значение.
Можно по ключу, в твоём случаи, ключ может быть логин аккаунта, можно взять акк из списка с удалением, https://redis.io/commands/getdel/
Это одним запросом, так как этой командой Редис блокирует всю базу до выполнения, а скорость выполнения, максимум 10 миллисекунд, даже если будут 100 запросов одновременно, редис будет их обрабатывать по очереди, потому что однопоточный

Если есть знания в кодинге, можно все это скрестить с синхронизацией базы данных и редиса на лету

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

У меня есть API для работы с соц. сетями, там именно это связка, Django+MySQL+Redis+FastAPI
Django+MySQL это как админка, она для просмотра статистики и манипуляций с акакми,
Redis+FastAPI на лету синхронизирует данные с Django+MySQL
У меня установлено принудительная перезагрузка всего если что-то падает, но не было такого ещё. Если что-то упало, оно быстро восстанавливает данные из MySql
Мне это делали на заказ, но я использую несколько машин, потому мне никак не подходит файловая связка
 
  • Спасибо
Реакции: olek2765

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)