Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Новый коннект в ODBC / 6 сообщений из 6, страница 1 из 1
17.02.2007, 17:06
    #34338475
OIO
OIO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
Здравсвуйте!
Я пишу приложение на ODBC. Создается окружение для соединения с БД
Код: plaintext
1.
SQLHENV hEnv;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
Мне надо, чтобы к одной базе (и даже к одной таблице) имели одновременно доступ несколько потоков. Я так понимаю, что для каждого потока надо свой коннект
Код: plaintext
1.
2.
3.
SQLHDBC hDBC;
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
SQLConnect(hDBC, (SQLCHAR *)SName, strlen (SName), (SQLCHAR *)uid, strlen (uid), (SQLCHAR *)psw, strlen (psw));
Вопрос: эти коннекты могут быть в одном окружении БД (hEnv)? Сколько коннектов может быть в одном окружении? Или может все потоки пустить через один коннект? Не будет ли проблемы, что несколько коннектов будут использовать одно имя пользователя/пароль?
Как Вы поступаете в таком случае?
...
Рейтинг: 0 / 0
17.02.2007, 17:13
    #34338484
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
OIO пишет:
> Мне надо, чтобы к одной базе (и даже к одной таблице) имели одновременно
> доступ несколько потоков. Я так понимаю, что для каждого потока надо
> свой коннект

Не обязательно, можно и один коннект разделять.

> Вопрос: эти коннекты могут быть в одном окружении БД (hEnv)?

Да

Сколько
> коннектов может быть в одном окружении?

Сколько угодно.

Или может все потоки пустить
> через один коннект?

Можно, но при этом нужно будет разделять его между
потоками, синхронизировать доступ и т.п.

Не будет ли проблемы, что несколько коннектов будут
> использовать одно имя пользователя/пароль?

Нет, если это допустимо с точки зрения приложения.
Напр. если надо отслеживать в приложении что-то по этим
параметрам.

> Как Вы поступаете в таком случае?

Я писал библиотеку, разделяющую соединение между потоками.
При этом надо учитывать то, что в соединении
может быть только один активный оператор. Его нужно
выполнить и выбрать данные. Потом только может работать
другой оператор (в другом потоке).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.02.2007, 17:25
    #34338493
OIO
OIO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
Я ведь не обманываю себя, если думаю, что СУБД (Оракл, МС Сервер, ...) позволяют к данным одной таблицы обращаться нескольким потокам одновременно? Если мне надо реализовать одновременный доступ к данным, то вариант с одним коннектом, разделяемым между потоками, не подходит, ибо теряется смысл многопоточности.
В таком случае, поток сам создает свой коннект отработал, убил его. Тут же возникает вопрос, может не стоит убивать коннект, а оставлять его, новый поток будет использовать его, если он свободен. Накладная ли это процедура создание коннекта?
...
Рейтинг: 0 / 0
17.02.2007, 18:57
    #34338585
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
не отлючайте conncection pooling - накладные расходы на открытие/закрытие коннекта будут минимальны
...
Рейтинг: 0 / 0
17.02.2007, 20:53
    #34338663
Привет09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
авторМне надо, чтобы к одной базе (и даже к одной таблице) имели одновременно доступ несколько потоков. Я так понимаю, что для каждого потока надо свой коннект
Ну на счет автор...чтобы к одной базе ..., тут проблем нет ( если у тебя версия не с "обрезанными 'яйцами' ", а вот автор...(и даже к одной таблице)..., советую почитать про блокировки и уровни изоляции и перенести логику на сервер.
Удачи.
ЗЫ: Потоки тут ни причем.
...
Рейтинг: 0 / 0
17.02.2007, 22:16
    #34338749
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новый коннект в ODBC
OIO пишет:
> позволяют к данным одной таблицы обращаться нескольким потокам
> одновременно?

Позволяют.

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

Не всегда. Но если нужно - вперед, каждому потоку по коннекции.

> В таком случае, поток сам создает свой коннект отработал, убил его. Тут
> же возникает вопрос, может не стоит убивать коннект, а оставлять его,
> новый поток будет использовать его, если он свободен. Накладная ли это
> процедура создание коннекта?

Накладная. Лучше использовать повторно.

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


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