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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/4c798067-55cd-4d20-9eba-875c4743ce73n%40googlegroups.com.