Синглтон database.php - PullRequest
       9

Синглтон database.php

0 голосов
/ 01 августа 2010

Если у меня есть класс database.php (singleton), который читает и записывает информацию для пользователей моего веб-приложения, что произойдет, когда вызываются одновременные запросы для одной и той же функции базы данных?

Возможно ли, что класс базы данных будет возвращать неверную информацию другим пользователям, одновременно обращающимся к той же функции?

Какие еще похожие проблемы могут возникнуть?

1 Ответ

4 голосов
/ 01 августа 2010

что происходит при одновременном вызове одной и той же функции базы данных?Возможно ли, что класс базы данных будет возвращать неверную информацию другим пользователям, одновременно обращающимся к той же функции?

Абсолютно нет.

Каждый запрос PHP обрабатывается полностью всобственное пространство процессов.Здесь нет потоков, нет пула соединений с сервером приложений, нет разделяемой памяти и ничего подобного.Ничто не передается, если вы не пытались это сделать (например, кэширование вещей в APC / memcached).

Каждый раз, когда приложение запускается, ваш Singleton создается.Когда запрос заканчивается, скрипт тоже.Когда сценарий завершается, все переменные, включая ваш синглтон, исчезают вместе с ним.

Какие еще похожие проблемы могут возникнуть?

Если вы не используете транзакции (и если вы используете MySQL, используя безопасный для транзакций тип таблицы (например, InnoDB), вполне возможно, что пользователи смогут увидеть частичные обновления.Например, предположим, что вам нужно выполнить обновление трех таблиц, чтобы правильно обновить один набор данных.После завершения первого обновления, но до завершения двух других, возможно, что другой процесс придет и запросит данные из трех таблиц и получит несогласованные данные.Это одна из форм состояния гонки .

...