- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Приветствую всех :)
Прошу прощения за простыню, но описать вопрос короче не получается.
Если кратко, то вопрос касается того, как избежать ссылок на несуществующие записи в БД, при одновременной работе нескольких пользователей.
Раньше мне не приходилось задумываться над этой проблемой, да и, плюс ко всему, имеется слабое понимание работы внутренних механизмов всевозможных СУБД, поэтому пишу с целью получить конкретные рекомендации, либо определить направление, в котором стоит изучать данную тему.
Ниже я опишу вымышленный пример, для наглядности:
Предположим, что имеется таблица с перечнем групп, со следующими полями:
id, name
Также имеется таблица с перечнем аккаунтов:
id, login, password, group_id
group_id - по сути содержит id группы и определяет принадлежность к ней того или иного аккаунта.
Скрипт, обеспечивающий добавление нового аккаунта, можно условно разделить на 2 этапа:
1) Проверяем существование выбранной группы (дабы перестраховаться)
2) Добавляем новую запись в БД
Теперь сама суть вопроса:
Возможна ли такая ситуация, что между первым и вторым этапом работы скрипта, группа, к которой привязывается добавляемый аккаунт, будет удалена? Соответственно мы добавим аккаунт с привязкой к уже не существующей группе.
Хочется не оценивать вероятность возникновения подобной ситуации, а понять возможна ли такая ситуация в принципе и если возможна, то какими средствами подобных ситуаций можно избежать?
Если она все таки возможна, то я вижу следующие способы ее избежать:
1) Разработать сервисный скрипт, который будет отыскивать "потерянные" аккаунты и выполнять с ними какие-либо действия. Т.е. мы будем иметь возможность проводить профилактику.
2) Использовать блокировки таблиц. Вариант, как я понимаю, реальный, но со своими минусами.
Так вот существуют ли какие-либо более изящные решения данной проблемы?
использование БД или типов таблиц в БД, которые поддерживают транзакции.
использование БД или типов таблиц в БД, которые поддерживают транзакции.
Вот с ними я пока дело тоже не имел, но правильно ли я понимаю, что при тех же условиях, что я описал изначально, если я оберну все манипуляции с базой (при добавлении аккаунта) в транзакцию, то проблемы можно будет избежать?
А что Вы можете сказать насчет "Возможна ли такая ситуация, что между первым и вторым этапом работы скрипта, группа, к которой привязывается добавляемый аккаунт, будет удалена?"
будь мужиком, прочитай про транзакции. до конца.
будь мужиком, прочитай про транзакции. до конца.
Ну все! Твои слова возымели на меня действие - прекращаю разводить сопли и иду читать про транзакции)))
Ну а серьезно - спасибо всем участвующим. Пойду и правда про них почитаю.