![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Luchi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 21.8.2012 Репутация: нет Всего: нет |
Может кто объяснить! БД MySQL в ней 2 таблицы.
На сайте в БД в 1 таб. хранятся данные о регистрации пользователей, во 2-й инфа от пользователей. Классы пока не пишу. Пробую накидать скелет всего по простому, т.к. окончательного варианта пока нет. Сделал ф-ю для подключения к БД, ф-и для работы с БД и ф-ю для отключения и очистки переменных. Ф-и сделал, чтобы не писать данные для подключения на разных скриптах сайта, т.к. страниц на сайте больше 10-ти. Вопросы в следующем: 1. Нужно ли открыто указывать в ф-и данные для подключения к БД или это делается иначе? 2. К примеру на одной из страниц пользователь запустил скрипт, идет подключение к БД, проверка что пользователь зарегистрирован, получение и вывод данных по его запросу. Для него формируется страница, от БД он еще не отключился. На этом этапе другой пользователь открывает другую страницу, делает запрос и для него все идет по тому же сценарию. Т.к. сервера сейчас стоят многоядерные + параллельно может идти несколько процессов, поэтому пока выполнится один скрипт запустится уже другой. В итоге запросы либо могут перепутаться, а вероятнее всего просто возникнет ошибка, когда с БД будет работать несколько пользователей. В mysql_query дескрипторы не указываю. Достаточно для каждого нового запроса подключаться к БД и получать дескриптор, чтобы не было ошибок между разными подключениями к БД? 3. Нужно ли для каждого пользователя создавать новое подключение или есть способ отправлять запросы на одном созданном подключении для разных пользователей? 4. Нужно ли тогда каждый раз закрывать подключение или можно один раз получить дескриптор и отправлять запросы используя его? Вообщем хотелось бы понять, как грамотно организовать этот момент. |
|||
|
||||
Fortop |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 4 Всего: 42 |
Обычно это выносится в конфигурационные файлы для легкости настраивания. Не перепутаются. Если будете использовать транзакции, то еще и одними и теми же записями сможете работать в рамках разных подключений без опаски.
Не возникнет. Большинство БД рассчитаны на многопользовательскую работу. Опять же - используйте транзакции, когда это нужно.
Есть способ, зависящий от языка на котором пишете и БД. Называется пул соединений. Для общего ознакомления http://habrahabr.ru/post/194142/
Не нужно. Можно. -------------------- Мир это Я. Живее всех живых. |
||||||||
|
|||||||||
Luchi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 21.8.2012 Репутация: нет Всего: нет |
Спасибо Fortop за ответ, немного подправил свой код.
Пишу на PHP, версия на хосте 5.3, версия MySQL 5.1. Для использования транзакции нужны типы таблиц InnoDB или BDB. MySQL, который стоит на хосте этот тип таблиц не поддерживает. Поэтому вопрос 2 актуален. По поводу использования дескриптора, в мануале, закрывать соединение не обязательно, так как его, при завершении скрипта, php закроет автоматом, закрывать вручную просто правило хорошего кода. Но возникает вопрос, если я буду использовать одно соединение для всех, то, 1-й скрипт пойдет поэтому подключению, пойдет 2-й. 1-й завершится и автоматом завершит соединение, а 2-й еще будет выполняться и здесь возникнет ошибка? Это сообщение отредактировал(а) Luchi - 4.11.2013, 20:24 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
Luchi, при работе с одной таблицей ничего не перепутается даже без транзакций. за это отвечает субд.
транзакции кстати не столько на многопользовательский доступ ориентированы, сколько на согласованность операций над данными вообще. многопользовательский аспект тут скорее следствие и приятный бонус. но если речь идет только о выборке, транзакции не нужны. если производится изменение лишь одной таблицы, транзакции не нужны. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |