![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 26.08.2013
Сообщений: 187
|
![]()
Всем доброго времени суток!
Не давно начал изучать sql, читаю Мартина Грабера за 2014, и задался таким вопросом, а как же синхронизировать рбд, в книге нашёл информацию только о блокировках, но конкретных примеров этого нет, кто может, подскажите как оптимизировать запрос UPDATE с синхронизацией(говорю так потому что не знаю как правильно это называется в sql, возможно угадал ![]() |
![]() |
![]() |
![]() |
#2 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
![]() В СУБД на клиентском уровне нет потоков в том смысле как в ОС, а конкурентный доступ выполняется через транзакции, составной частью реализации которых являются блокировки. Ядро СУБД где-то внутри себя создает и завершает потоки ОС по мере надобности, но наружу видны только транзакции. Взаимодействие транзакций из разных сеансов описывается уровнями изоляции транзакций, их обозначают аббревиатурой ACID. Почитай в Википедии. Не помню, описывается это у Грабера или нет. Реализация транзакций зависит от конкретной СУБД. В стандарте SQL предусмотрены команды select for update, commit и rollback, они должны быть реализованы в любой СУБД. Каждая СУБД может иметь дополнительные команды для управления транзакциями, но стандарта на них нет. Я угадал с ответом?
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
И было бы неплохо узнать откуда ноги растут у сего вопроса.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 26.08.2013
Сообщений: 187
|
![]()
А ноги растут вот откуда : я собираюсь писать клиент-серверное приложение, где допустим в онлайне на данный момент находится 100 человек, на сервере есть скрипт в котором есть поиск игры, и этот скрипт выводит в поиске например игру с 10тью слотами для игры, когда человек входит в данный слот в БД некое поле COUNT = COUNT + 1( это на sql запросе) вот это и есть запись UPDATE, но случается такое иногда что если одновременно около 30 человек будут стучатся в данную игру со слотами, происходит переполнение, ну например 12 человек зашло в игру где всего 10 слотов. Вот и интересно как бы это решить.
|
![]() |
![]() |
![]() |
#5 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
В СУБД подобные задачи решаются добавлением записей в таблицу сеансов и контроля либо одновременного количества записей в таблице, либо количества активных записей (что-то вроде очереди).
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 26.08.2013
Сообщений: 187
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 26.08.2013
Сообщений: 187
|
![]()
Вот к примеру есть запрос:
Код:
|
![]() |
![]() |
![]() |
#8 | ||
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
Цитата:
Код:
Подразумевается, что пользователь помнит session_id в пользовательском окружении (на сервере или на клиенте), а при выходе из игры запись удаляется. Можно хранить историю всех сеансов, для чего ввести поле active и проверять его в подзапросе.
В разработке: воспроизводственный контур ИТ
|
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Потоки, Критическая секция, виснет форма. | Sonny01 | Помощь студентам | 3 | 14.10.2012 18:26 |
секция resource | goluzov | Win Api | 0 | 04.08.2012 09:16 |
Критическая секция между потоками на разных ядрах | 3D Hunter | Win Api | 11 | 26.02.2012 08:06 |
КРИТИЧЕСКАЯ ОШИБКА | benjaminfran | Общие вопросы Delphi | 11 | 15.02.2008 11:23 |