Lessons
Partitioning (???????????) ???? ???
Database Connection Pooling
Postgres Command
Connection Pooling
Go में Database Connection Pooling क्या है?
Connection Pooling का मतलब है कि हर बार नया database connection खोलने की बजाय, एक बार खुले connections को reuse करना। इससे आपकी एप्लीकेशन की गति (performance) और स्थिरता (stability) दोनों बढ़ती हैं।
Connection Pooling के लाभ
- हर request पर नया connection open/close नहीं करना पड़ता।
- Database पर लोड कम होता है।
- API का response time कम हो जाता है।
- Server पर concurrent users को आसानी से संभाला जा सकता है।
Connection Pool के बिना उदाहरण
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func main() {
db, err := sql.Open("postgres", "user=postgres password=123 dbname=test sslmode=disable")
if err != nil {
panic(err)
}
// ❌ बिना pool config के — हर बार नया connection खुलेगा
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
panic(err)
}
defer rows.Close()
fmt.Println("Data fetched successfully")
}
Connection Pool के साथ उदाहरण
package main
import (
"database/sql"
"fmt"
"log"
"time"
_ "github.com/lib/pq"
)
func main() {
dsn := "user=postgres password=123 dbname=test sslmode=disable"
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatal(err)
}
// ✅ Connection Pool Configuration
db.SetMaxOpenConns(25) // अधिकतम एक समय में खुले connections
db.SetMaxIdleConns(10) // idle (खाली) connections की संख्या
db.SetConnMaxLifetime(30 * time.Minute) // एक connection की अधिकतम उम्र
db.SetConnMaxIdleTime(10 * time.Minute) // idle रहने की अधिकतम अवधि
// Query execute करें
rows, err := db.Query("SELECT id, name FROM users LIMIT 5")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
rows.Scan(&id, &name)
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
fmt.Println("✅ Connection pooling enabled successfully!")
}
Load Test Result तुलना
| Parameter | बिना Pool | Pool Enabled |
|---|---|---|
| Average Latency | 150-250ms | 15-30ms |
| Requests/sec | ~500 | ~5000+ |
| Error Rate | 20% | 0% |
| DB Load | High | Stable |
pg_stat_activity view से connections की स्थिति देख सकते हैं।
निष्कर्ष
Connection Pooling किसी भी high-performance Go API के लिए आवश्यक है। यह न केवल PostgreSQL के साथ बल्कि MySQL, SQLite आदि databases में भी काम करता है।