О многопоточности бд!

  • Автор темы Автор темы MaksimHelp
  • Дата начала Дата начала

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
213
Реакции
8
Баллы
18
Всем привет! У меня такой вопрос, работаю с базой данных, во многопотоке возможно ли такое что потоки могут совпасть и одновременно взять одну и туже строку? Если да, то как этого избежать?
 
Всем привет! У меня такой вопрос, работаю с базой данных, во многопотоке возможно ли такое что потоки могут совпасть и одновременно взять одну и туже строку? Если да, то как этого избежать?
На форуме обсуждался этот момент. Поищите, где то был топик.
 
  • Оценить
Реакции: MaksimHelp
  • Оценить
Реакции: MaksimHelp
Блин, день какой то не такой сегодня... Не могу найти, в конкурсных статьях есть хороший материал про локи.
 
Нет, в предыдущих конкурсах.
 
Могут или не могут зависит от логики запросов. Если речь об обычном селекте - могут. Можно использовать транзакции, вторым запросом которй будет апдейт этой строки таким образом, чтобы другой селект её уже не мог взять. Можно без транзакций сначала апдейтить строку, присваивая спец. полю, например, сгенерированный айди, а после по этому айди брать эту строку
 
Можно без транзакций сначала апдейтить строку, присваивая спец. полю, например, сгенерированный айди, а после по этому айди брать эту строку

Лучше с транзакциями, существует вероятность что одну и туже строку проадейтят более одного потока, между запросами апдейта и последующего селекта.
 
Лучше с транзакциями, существует вероятность что одну и туже строку проадейтят более одного потока, между запросами апдейта и последующего селекта.
У меня даже с транзациями брал одинаковые строки.
 
Лучше с транзакциями, существует вероятность что одну и туже строку проадейтят более одного потока, между запросами апдейта и последующего селекта.
если одна проапдейчена, то другой апдейт не сможет взять её по условию того, что поле спец идентификатора уже не пустое
 
возможно ли такое что потоки могут совпасть и одновременно взять одну и туже строку
1. Запросы на выборку типа select не блокируют таблицу или строку. Будут часто совпадать, часто начиная от 10 потоков.
2. Вначале забираем строку себе, через UPDADE, например в дополнительном столбце ставим UUID, по которому дальше будет делать select.
3. Тип таблицы так же влияет на работу, InnoDB блокирует построчно, MyIsam - всю таблицу.
 
если одна проапдейчена, то другой апдейт не сможет взять её по условию того, что поле спец идентификатора уже не пустое

Если спец поле выделить, то да.
 

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