powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественные запросы в секунду
4 сообщений из 4, страница 1 из 1
Множественные запросы в секунду
    #39172446
trojanserver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уже 3-й день не могу придумать алгоритм решения. Имеется БД, в ней таблица, в таблице несколько десятков тысяч строк. Каждую секунду к таблице обращаются клиенты, например 50 штук в секунду. Основная суть их запроса - SELECT нескольких строк. Но каждому клиенту нужно отдавать уникальные строки. Например клиенту 1 - с 1 по 5, клиенту 2 - с 6 по 7, следующему клиенту - следующих 5 и тд. Простыми словами приложение говорит базе - дай мне несколько строк. (К слову, все эти строки из базы я локально закешировал у каждого клиента, чтоб ускорить работу).
Все что мне пришло в голову - хранить в таблице в 0-м рядке индекс строки, которую я отдал в последний раз. Например я отдал 1000-ю строку. Когда очередной клиент подключается к базе, он вычитывает этот индекс, и увеличивает (UPDATE) его например на 5, т.к ему нужно 5 срок. А себе из локального хранилища уже берет строки с 1000 по 1005, получив разрешение.
Проблема в том, что в момент времени, когда клиент вычитал из 0-го рядка индекс, и следующей командой сделает UPDATE, другой клиент может УЖЕ перезаписать 0-й рядок таблицы своим значением. Для этого я думал использовать команду "SELECT… FOR UPDATE", которая блокирует считываемые строки на чтение. Я посчитал, что на 2 эти запроса (SELECT и UPDATE) в моем приложении уходит около 100 миллисекунд. А у меня 50 запросов в секунду, я боюсь что выстроится большая очередь, приложения начнут тупить и подвисать, пока получат ответ от базы.

Возможно знающие люди подскажут алгоритм или паттерн, по какому следует решать такого рода задачи? Спасибо.
...
Рейтинг: 0 / 0
Множественные запросы в секунду
    #39172469
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trojanserver,

Сама по себе таблица статичная, не изменяется?
...
Рейтинг: 0 / 0
Множественные запросы в секунду
    #39172516
trojanserver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Изменяется 1 раз в пару дней, полностью. Все клиенты получают новую копию данных.
...
Рейтинг: 0 / 0
Множественные запросы в секунду
    #39172519
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант.
Введи поле ID_Client. Для начала там Null. Клиент просто пытается зарезервировать себе запись, вписав в это поле свой ID:
Код: sql
1.
2.
3.
4.
5.
-- схематично
UPDATE table
SET ID_Client = :myID
WHERE ID = somevalue
AND ID_Client IS NULL 

Affected rows = 1? обрабатывай. Affected rows = 0, кто-то влез до тебя? пробуй зарезервировать другую запись.
Как вариант, не задавать ID, но задать LIMIT 1. А потом смотреть, какая запись зарезервировалась.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественные запросы в секунду
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]