I'm using the MongoDB Go Driver in my Go (1.11) server which runs on Google Cloud's App Engine. I'm not really sure if I still manually have to set up connection pooling or if it's already being taken care of out of the box. For example I'm not entirely sure what the context (with timeout) exactly means.
My code looks like this:
package tools
import (
"context"
"time"
"valuation-app/settings"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// ConnectToDB starts a new database connection and returns a reference to it
func ConnectToDB() (*mongo.Database, error) {
settings := settings.Get().Database
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
options := options.Client().ApplyURI(settings.URI)
options.SetMaxPoolSize(10)
client, err := mongo.Connect(ctx, options)
if err != nil {
return nil, err
}
return client.Database(settings.DatabaseName), nil
}
Sharded Cluster Connection Poolingmongos routers have connection pools for each node in the cluster. The availability of connections to individual nodes within a sharded cluster affects latency. Operations must wait for a connection to be established.
100 ( maxPoolSize default 100 ) x 4 (application servers) = 400 (incoming connections to each mongod).
Go is one of the newest languages to get an official MongoDB driver, and the combination of Go's compiled performance and lightweight, data-friendly syntax makes Go with MongoDB a fantastic match for building data-driven applications.
From comments:
Mongo-go-driver takes care of connection pooling by default(100 connection by default)
You can read the source code here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With