Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать) / 16 сообщений из 16, страница 1 из 1
18.10.2003, 12:40
    #32297375
Paranoik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
Перемещения по категориям и прочие типичные действия подразумевают послания запросов в mysql. Как лучше сделать:
1. каждое обращение будет состоять из установления соединения, выполнения запроса и отключения;
2. сразу создать соединение и не закрывать его, выполняя только запросы?

Надежнее, понятно, первое... Но всё же как лучше? Чем лучше? И чем грозит?

Спасибо.
...
Рейтинг: 0 / 0
18.10.2003, 13:42
    #32297392
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
> Надежнее, понятно, первое...
??? не вижу причин, почему этот вариант надежнее.
Обычно делают все в одном соединении (AFAIK).
Лучше укажи какой язык используешь и спроси на форуме по этому языку
...
Рейтинг: 0 / 0
18.10.2003, 20:57
    #32297566
Paranoik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
На php пишу...

Хорошо, если мы установили соединение один раз, то как гарантировать, что оно не оборвалось? Каждый раз проверять перед запросом? Или обрабатывать возможную ошибку при посыле запроса? И как своевременно закрывать соединение? Что произойдёт, если юзера просто внезапно снесёт?

Чесс гря я почти не знаком с механизмами этих соединений, как оно работает... Знаю только что его надо создавать и закрывать )
Что и делаю перед каждым изменением, запросом юзера.

Попровьте пожалуйта или поясните чего...
...
Рейтинг: 0 / 0
19.10.2003, 04:18
    #32297634
ScableR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
Если юзверя чем-нибудь снесет (ну... там балкой или что там еще падает =)) то тогда при посылке запроса будет выдана ошибка. И ессно ни какие данные не будут добавлены. Юзверю придеться по новому запускать скрипт. И по том. Это ж элементарная логика! Что до закрытия соединений, то их можно и не закрывать. Не суть важно.

©2003 ScableR...
...
Рейтинг: 0 / 0
19.10.2003, 11:42
    #32297677
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
1. php сам закрываетсоединение с mysql при окончании работы скрипта
2. Вообще-то обычно соединение само так просто не пропадает. Это либо проблемы хостера, либо еще какие-то форс-мажорные обстоятельства.
Код: plaintext
1.
2.
3.
4.
5.
// Открываешь одно соединение:
$conn = mysql_connect(...)
...
// делаешь запросы например так
$res = mysql_query( "SELECT * FROM tab_name WHERE id = 1 ",$conn) or die( "Извините, на сервере произошла ошибка" );
... // и т.д.

если соединение пропало - пользователю будет выдано сообщение и все.
...
Рейтинг: 0 / 0
19.10.2003, 17:25
    #32297757
Paranoik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
"Открываешь одно соединение"
Точек входа может быть несколько. Т.е. соединение надо создавать на каждой из них. Тогда может так:
Код: plaintext
1.
2.
3.
4.
5.
if (!$connected){
    $conn = mysql_connect(...);
    $connected = TRUE;//глобальная...
}
$res = mysql_query( "SELECT * FROM tab_name WHERE id = 1 ",$conn) or die( "Извините, на сервере произошла ошибка" );



А на функцию отсоединения можно просто боль забить?

Стоп.. "php сам закрывает соединение с mysql при окончании работы скрипта "
А окончание работы скрипта - это где?? Когда выполнился весь набор предусмотренных действий после, скажем, активации ссылки?
...
Рейтинг: 0 / 0
19.10.2003, 22:05
    #32297825
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
В _норманой_ пограмме всегда одна точка входа. С нормальной инициализацией подключения к СУБД (если надо) и инициализацией глобальных переменных (если они есть).

Если писать все по-человечески, то проблем с отслеживанием подключения возникнуть не может.
...
Рейтинг: 0 / 0
20.10.2003, 00:47
    #32297840
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
Несколько соображений без конкретных советов:

В mysql операция соединения - очень "легковесная" (в отличие от большинства других СУБД), так что коннект каждый раз - много ресурсов не займет.

Если надо проверить - живо ли соединение, делается mysql_ping. Если соединение живо - то ничего не происходит, если уже оборвалось, то mysql_ping переконнектится к серверу с параметрами, которые были раньше в соединении.

Если хочешь использовать постоянные соединения (типа mysql_pconnect ), то помни что могут быть накладки например с временными таблицами (или другими атрибутами сессии)
...
Рейтинг: 0 / 0
20.10.2003, 10:14
    #32298014
Paranoik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
2 Stellar
Ты всегда такие ценные советы даёшь? :-)))
"В _норманой_ пограмме..." "...писать все по-человечески..."
Ты видать с олимпа программирования спустился ко мне смертному
----------------------------------


Видимо я не так изъяснил суть.. Я к сожалению не знаю необходимой терминологии. На пальцах напишу тогда?
Есть главная страница. Никаких скриптов не запускалось ещё. На ней, скажем, 5 разных ссылок на разные скрипты, функции... Юзер может сначала на одно ткнуть, затем на другое... В любой комбинации. Кажое его действие скриптом обращается в БД. Так вот, мне каждый из пяти скриптов обрамлять установлением соединения и его завершением или создать его один раз, а в остальных возможных действиях подразумевать, что оно уже есть? А т.к. все крипты равновесные, то обязательство установить соединение в первый раз может быть возложено именно на него.

Вообще, раз уж тов. Хрен , что установление соединения легковесно, то можно, видимо, забить на проверки всякие, а просто устанавливать его каждый раз и завершать...
...
Рейтинг: 0 / 0
20.10.2003, 11:24
    #32298094
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
Не заморачивайся - устанавливай каждый раз. Просто подключи через инклюд в скрипты модуль с подключением к серванту - и все.
Использовать p_connect можно только кады php внедрен в въеб-сервер как подгружаемый модуль, но с этим p_connect-ом мона поиметь гемор...
...
Рейтинг: 0 / 0
20.10.2003, 12:13
    #32298188
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
При каждом вызове скрипта надо устанавливать соединение.

Функции типа pconnect'a используются для установки постоянного соединения, однако вызываться должны каждый раз. При этом алгоритм работы следующий: если ранее было установлено соедиение, оно используется в этот раз; если не было - оно создается.

Так что сделать pconnect в скрипте a.php и не делать его в b.php, не получится.

2Paranoik:
Да, я спустился с Олимпа, к тебе, смертному. ))))
...
Рейтинг: 0 / 0
20.10.2003, 12:17
    #32298192
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)

Использовать p_connect можно только кады php внедрен в въеб-сервер как подгружаемый модуль, но с этим p_connect-ом мона поиметь гемор...


Ерунда.
Внимательно читай руководство:
http://ru3.php.net/manual/ru/function.mysql-pconnect.php

---
mysql_pconnect() acts very much like mysql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mysql_close() will not close links established by mysql_pconnect()).

---

Использовать pconnect можно и нужно всегда. Если php не установлен как модуль вебсервера, pconnect работает точно также, как и connect.
...
Рейтинг: 0 / 0
20.10.2003, 12:22
    #32298200
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
Касаемо "поиметь гимор":

Using persistent connections can require a bit of tuning of your Apache and MySQL configurations to ensure that you do not exceed the number of connections allowed by MySQL.

То есть очевидно, что это задача админа, а не программиста -- настраивать Apache и MySQL.

От себя могу добавить, что ресурс с посещаемостью 25000 уникумов в день отлично работал с pconnect без какой-либо дополнительной настройки MySQL и Apache. При этом кроме этого проекта на машине вертелись еще 4 подобных, но с меньшей посещаемостью (от 5000 до 17000).
...
Рейтинг: 0 / 0
20.10.2003, 15:54
    #32298632
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
>> Ерунда.
>> Внимательно читай руководство:

Ну вот сам и читай. Там же ниже и написано:
Note, that these kind of links only work if you are using a module version of PHP.

т.е. если ПХП работает в режиме CGI "wrapper - то использовать p_connect - нету смысла.
По поводу гемора - уже писали выше - насчет временных таблиц...
...
Рейтинг: 0 / 0
21.10.2003, 10:39
    #32299390
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
А вам не кажется, что выражения "нету смысла" и "можно использовать только" имеют слегка разный смысл?
...
Рейтинг: 0 / 0
21.10.2003, 10:49
    #32299404
Paranoik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать)
2stellar ладно, аполлон, понтов поменьше, да по теме побольше; глядишь и люди потянутся.


Благодарю всех за конструктивные соображения! Выводы сделаны.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как в магазине лучше поступить с соединениями (на каждый запрос конектиться заново или на одном соединении всё делать) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]