Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше организовать Connect/Disconnect / 7 сообщений из 7, страница 1 из 1
08.02.2007, 10:46
    #34314921
OIO
OIO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
Здравствуйте!
У меня в приложении имеет место быть частое обращение к БД, выборка от туда определенных данных. Для соединения у меня написана такая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
int Connection(idbSes *Ss, char *SName, char *uid, char *psw)
{
	SQLHENV *hEnv = &Ss->hEnv;
	SQLHDBC *hDBC = &Ss->hDBC;
	RETCODE rc;

	// Allocates environment 
	rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_CON_FAIL;
	
	// Sets environmental attributes
	rc = SQLSetEnvAttr(*hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,  0 );
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) 
        {
                   SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);
                   return IDB_CON_FAIL;
        }
	
	// Allocates space for connection
	rc = SQLAllocHandle(SQL_HANDLE_DBC, *hEnv, hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
        {
	         SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);	
	         return IDB_CON_FAIL;
        }

	// Set login timeout as 5 seconds
	SQLSetConnectAttr(hDBC, SQL_ATTR_CONNECTION_TIMEOUT, (void *) 5 ,  0 );
	SQLSetConnectAttr(hDBC, SQL_ATTR_LOGIN_TIMEOUT, (void *) 5 ,  0 );
	
	// Connection
	rc = SQLConnect( *hDBC, (SQLCHAR *)SName, strlen (SName), (SQLCHAR *)uid, strlen (uid), (SQLCHAR *)psw, strlen (psw));

	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
	{
		SQLFreeHandle(SQL_HANDLE_DBC, *hDBC);
		SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);	
		return IDB_CON_FAIL;
	}

	return IDB_OK;
}
И функция для дисконнекта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
int Disconnection (idbSes *Ss)
{
	SQLHENV *hEnv = &Ss->hEnv;
	SQLHDBC *hDBC = &Ss->hDBC;
	RETCODE rc;

	rc = SQLDisconnect(*hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	rc = SQLFreeHandle(SQL_HANDLE_DBC, *hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	rc = SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	return IDB_OK;	
}
Ну, примерно так.
Так вот вопрос в следующем: как лучше организовать Connect/Disconnect, перед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
...
Рейтинг: 0 / 0
08.02.2007, 11:33
    #34315113
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
Один коннект, одна грязная транзакция.
...
Рейтинг: 0 / 0
08.02.2007, 11:36
    #34315128
OIO
OIO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
Не совсем понял, что значит грязная транзакция. И чем это чревато.
...
Рейтинг: 0 / 0
08.02.2007, 13:56
    #34315806
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
OIOперед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Какая цена вопроса???

Если у тебя интенсивная работа с базой - каждый коннект/дисконнект + проверка прав выльется в заметные накладные расходы, например обработка платежей населения за ЖКХ.
Иначе незачем держать коннект, если работа с базой от случая к случаю, например, через internet юзер хочет узнать расписание самолётов/поездов. Получил и отвалил изучать его.
...
Рейтинг: 0 / 0
08.02.2007, 14:43
    #34316041
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
OIOНе совсем понял, что значит грязная транзакция. И чем это чревато.

Тема для какого-нибудь форума по работе с базами данных.

dirty в fbclient
isc_tpb_read_committed Высокопроизводительная конкурирующая транзакция, которая может читать изменения, подтверждённые другими конкурирующими транзакциями. Использование этого параметра предоставляет все преимущества многоверсионной модели транзакции InterBase.
isc_tpb_rec_version Позволяет транзакции с параметром isc_tpb_read_committed читать наиболее свежую подтверждённую версию записи, даже если не существуют другие неподтверждённые версии.


но это все так - примерно.

Я бы тебе посоветовал хорошенько описать временную схему работы твоего приложения: частота запросов, важность достоверности данных, режим работы. А после этого отправить этот вопрос в форум по БД.
...
Рейтинг: 0 / 0
08.02.2007, 16:19
    #34316537
--ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
Zmeishe OIOперед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Какая цена вопроса???

Если у тебя интенсивная работа с базой - каждый коннект/дисконнект + проверка прав выльется в заметные накладные расходы, например обработка платежей населения за ЖКХ.
Иначе незачем держать коннект, если работа с базой от случая к случаю, например, через internet юзер хочет узнать расписание самолётов/поездов. Получил и отвалил изучать его.

Connection pooling является компромиссом
...
Рейтинг: 0 / 0
08.02.2007, 21:14
    #34317450
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать Connect/Disconnect
OIO пишет:
> Так вот вопрос в следующем: как лучше организовать Connect/Disconnect,

Вот так вот:
> или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше организовать Connect/Disconnect / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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