1

Тема: Мультипотоковий доступ до БД

Як з найкраще організувати доступ до БД одночасно з N потоків, щоб уникнути колізій ? Наприклад є синглтон у якому є декілька паблік мемберів, що роблять запити та повертають результати цих запитів. Як уникнути потенційних проблем, при одночасних зверненнях до них з кількох потоків ?

2

Re: Мультипотоковий доступ до БД

Приберіть синглтон, хай кожен потік підключається самостійно. Бо у бази (зазвичай, ви не написали, що за база) структура передбачає багато з'єднань, програма у вас багатопотокова - а ви навмисно ставите синглтон, щоб прибрати всі можливі переваги. У синглоні зберігайте хіба шо налаштування.
Що ж до того, як уникнути проблем - різних по-різному. Чи ви очікуєте, що вам тут підручник напишуть?

Подякували: Q-bart, DOP, Engineer3

3

Re: Мультипотоковий доступ до БД

koala написав:

Чи ви очікуєте, що вам тут підручник напишуть?

очікую що про свій досвід напишуть

4

Re: Мультипотоковий доступ до БД

Не потрібно ніяких сінглтонів. Зв'язок з базою йде через об'єкт DbConnection, який ви створюєте явно, передаючи connection string як параметр для конструктора, або він десь захований в "недрах" того фреймворку, через який ви працюєте з базою даних.

Фішка в тому, що "використані" об'єкти Connection не йдуть відразу на утилізацію гарбідж колектором, а автоматично поміщаються у спеціальний пул й живуть там деякий час. А при створенні нового Connection не створюється відразу нове з'єднання, а йде спроба використати готове з пулу, і вже якщо там нічого немає, то робиться нове. Так що .Net сам непогано визначає скільки відкритих з'єднань потрібно в програмі

5

Re: Мультипотоковий доступ до БД

Update - а робота з базою повинна йти за принципом- "хто перший встав - того й тапки". ІМНО
І ніяких колізій там не бачу. Просто не потрібно лочити дані на довгий час.
Швиденько зчитав , або записав й від'єднався

6

Re: Мультипотоковий доступ до БД

cheappi386 написав:

доступ до БД одночасно з N потоків, щоб уникнути колізій ?

cheappi386 написав:

уникнути потенційних проблем, при одночасних зверненнях до них з кількох потоків ?

Не дуже зрозуміло, які конкретно, проблеми Вас цікавлять (С# чи СУБД)... Якщо на рівні СУБД, то можете зосередитися на рівні ізольованості транзакцій + оптимістичне блокування/песимістичне блокування

Подякували: leofun011