SQL-server не обновляет данные, когда я использую одну таблицу с двух пк

Рейтинг: 0Ответов: 1Опубликовано: 16.06.2023

У меня есть два питон кода, которые работают на двух разных пк. Они подключены к одной базе данных SQL-server. Но данные в таблице у двух пк разные и обновляются только при перезапуске. В чем может быть проблема? Можно ли как-то сделать, чтобы когда я добавлял строку в таблицу с одного пк, на другом пк она тоже появлялась в таблице?

Ответы

▲ 0

У вас самая обычная ситуация для многопоточного программирования - несколько процессов используют 1 разделяемый ресурс - данные. Работает примерно так - при подключении и выполнении запроса к БД процесс получает в кэш определенный набор данных и далее с ним работает. Т.е. у каждого процесса - своя копия. При внесении изменений одним процессом в БД, остальные не знают об этом.
Работа с такими ситуациями описана в любом учебнике/руководстве/курсу по многопоточному программированию.
При перезапуске данные у вас обновляются, потому что происходит перечитывание данных из таблицы. Можете просто заново выполнить запрос - данные перечитаются без перезапуска программы.
Вариантов решений много (разного качества и сложности реализации), нужно выбирать наиболее подходящий в зависимости от технологии работы вашей программы, нагруженности системы и т.д.
Например:

  • поток при внесении изменений посылает сигнал всем остальным потокам, чтобы они перечитали данные;
  • можно читать не выборку из таблицы, а только 1 запись. Правда эта ситуация повторится, если 2 потока будут редактировать одну и ту же запись одновременно;
  • периодически перечитывать данные из таблицы
  • держать в базе данных счетчик версии, который изменяется при внесении изменений. В процессах читателях проверять версию и перечитывать данные
    и т.д. В любом случае в трёх словах не опишешь - по многопоточному (параллельному) программированию читают целые курсы.