@romicohen
Системный Архитектор

Как сделать запись на основе предыдущей?

Как называется (что гуглить) задача, когда в таблице MySQL нужно сделать запись на основе предыдущей, и на это время закрыть доступ к таблице?
Делаю что-то вроде блокчейна, и там примерно такое планирую:
1. Берется запись 1 из таблицы A
2. На ее основе формируется и вставляется запись 2
3. На время, пока запись 2 формируется и вставляется, нужно закрыть доступ И на запись И на чтение (чтобы никто не начал параллельно формировать запись на основе 1), к таблице А
4. Если кто-то во время блокировки стучится на доступ к этой таблице - не отказывать ему, а просто поставить в очередь
5. Соответственно, чтобы формировалась очередь
6. И чтобы этим процессам в очереди давалась уже новая версия таблицы, включающая запись 2
Вопросы: Как называется такая типовая задача? Подходит ли MySQL и нужно что-то другое?
  • Вопрос задан
  • 39 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Почитай про
SELECT FOR UDPATE ...

Точно не помню но кажется не все типы таблиц его проддерживают. Проверь что у тебя innodb.
Ответ написан
Комментировать
@Vitsliputsli
Для описанного сценария можно использовать lock таблицы. Либо пусть все это обрабатывает 1 сервис и хранит текущую строку в памяти - это будет эффективнее. Т.е. приходит запрос, его кладем в очередь (какой-нибудь брокер сообщений), наш сервис в фоне забирает сообщение из очереди и из него и строки в памяти формирует новую строку, отдает ее опять в очередь, изначальный запрос забирает данные из очереди.
Если я правильно понял, что в принципе нельзя обрабатывать параллельно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы