Does any solution exist for this problem?

I'm facing similar problem, want to run bunch of queries inside a 
transaction,
but want to run them concurrently, as running sequential is taking more 
than 1 second.

On Friday, June 29, 2018 at 6:32:40 PM UTC+5:30 Space A. wrote:

> Hi,
>
> DB in common case will do lock/unlock when necessary for you implicitly. 
> It is safe to call queries simultaneously. Moreover it is general approach 
> in Enterprise solutions to have let's say hundreds of open connections 
> sockets towards DB and execute statements from hundreds of threads. However 
> to answer your question accurate you need to look at underlying 
> implementation. As I understand, most of Go DB implementations don't even 
> have connection pool capabilities. So they are even "safer" from that point 
> because single network socket will become additional (and unnecessary) 
> "serialization" mechanism. You could probably try to implement connection 
> pool by yourself.
>
>
> Regards,
>
>
> среда, 27 июня 2018 г., 15:19:27 UTC+3 пользователь Ain написал:
>
>> Hi
>>
>> It is my understanding that DB Tx is generally not safe to use 
>> concurrently, ie consider following code:
>>
>>     tx, err := db.Begin()
>>     defer tx.Rollback()
>>     ...
>>     statements[0], err := tx.Prepare("...")
>>     defer s1.Close()
>>     statements[1], err := tx.Prepare("...")
>>     defer s2.Close()
>>     ...
>>     wg.Add(len(statements))
>>     for x := range statements {
>>         go func(x int) {
>>             defer wg.Done()
>>             statements[x].QueryRow(...).Scan(...)
>>         }(x)
>>     }
>>     wg.Wait()
>>
>> Here we prepare bunch of statements for a Tx which are "independent of 
>> each other", ie query different tables and scan to different variables etc. 
>> However they can't be executed concurrently, in a goroutine, as they share 
>> the same connection and thus interfere with each other?
>>
>> It might be safe when db driver takes care to serialise the statements 
>> but database/sql doesn't guarantee safe usage for given secenario.
>> Is that correct?
>>
>> So how would you go about executing multiple queries in the same 
>> transaction context concurrenty?
>>
>>
>> TIA
>> ain
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/4c798067-55cd-4d20-9eba-875c4743ce73n%40googlegroups.com.

Reply via email to