@estry

Можно ли работать двумя программами с одной базой данных?

Привет. Можно ли организовать работу двух программ с одной базой данных таким образом чтобы при выполнении запросов из одной программы база данных лочилась и вторая программа ждала пока не закончится работа первой программы с базой данных? Боюсь чтобы обе проги не получили одни и те же данные. Есть ли какие то методы для MySQL и sqlite?
  • Вопрос задан
  • 436 просмотров
Пригласить эксперта
Ответы на вопрос 3
@alexalexes

Обе программы получают из базы данные и работают с ними. Так вот я хочу исключить вероятность получения одних и тех же данных обеими програмамми. Сейчас у меня в коде используется using и в нем идет открытие соединения. Далее, получаем данные, в определенном столбце таблицы я помечаю, что данные взяты, что свидетельствует второй программе о том, чтобы она эти данные уже не брала.

Основываясь на этом комментарии, могу сказать, что вам нужно познакомиться с теорией: шаблоном проектирования "Планировщик"
и системы на основе очереди задач.
Помимо "двух программ", в вашем случае это воркеры (исполнители), в вашей системе должен еще присутствовать планировщик, имеющий приоритет над воркерами, который будет формировать задачи.
Назначать задачи исполнителям может как планировщик, так и сами исполнители.
Каждая задача должна иметь идентификатор, статус выполнения, назначенный исполнитель, а также перечень объектов, которые должен обработать исполнитель. Как раз перечень объектов и будет ограничивать работу одного исполнителя, чтобы они "не лезли на одни и те же записи в таблицах".
Конечно, нужно познакомиться с транзакциями и уровнями блокировки таблиц - это только часть инструментов реализации системы, но без планировщика вам не обойтись.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
SQLite по умолчанию блокируется при открытии, а у MySQL есть блокировки.
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
Читай маны про уровни блокировки таблиц в базах данных
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы