Skip to content

Instantly share code, notes, and snippets.

View TrinhTrungDung's full-sized avatar
🏠
Working from home

Trịnh Trung Dũng TrinhTrungDung

🏠
Working from home
  • Buuuk
  • Ho Chi Minh City, Vietnam
View GitHub Profile
@TrinhTrungDung
TrinhTrungDung / docker-compose.yml
Last active March 22, 2020 02:43
Create new container which has PostgreSQL database
version: "3"
services:
db:
image: postgres
container_name: test.db
ports:
- "5432:5432"
environment:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
@TrinhTrungDung
TrinhTrungDung / main.go
Created March 20, 2020 11:59
Connect to the database created by docker container
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
func main() {
@TrinhTrungDung
TrinhTrungDung / main.go
Last active March 20, 2020 12:04
Add sample table and migrate to the database
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
type User struct {
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 12:09
Test file contains helper functions
package main
import (
"math/rand"
"testing"
)
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
func genRandomString(length int) string {
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 12:16
Test benchmark for ORM create
func BenchmarkOrmCreate(b *testing.B) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=testuser dbname=testdb password=123456 sslmode=disable")
if err != nil {
fmt.Println(err)
}
defer db.Close()
users := stubUsers(b)
for _, user := range users {
db.Create(user)
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 12:34
Test benchmark using INSERT without batching
func BenchmarkCreate(b *testing.B) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=testuser dbname=testdb password=123456 sslmode=disable")
if err != nil {
fmt.Println(err)
}
defer db.Close()
users := stubUsers(b)
tx := db.Begin()
valueStrings := []string{}
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 14:38
Test bulk create using INSERT statement with batching
func BenchmarkBulkCreate(b *testing.B) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=testuser dbname=testdb password=123456 sslmode=disable")
if err != nil {
fmt.Println(err)
}
defer db.Close()
users := stubUsers(b)
size := 500
tx := db.Begin()
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 16:04
Test helper function with dynamic batching size
func benchmarkBulkCreate(size int, b *testing.B) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=testuser dbname=testdb password=123456 sslmode=disable")
if err != nil {
fmt.Println(err)
}
defer db.Close()
users := stubUsers(b)
tx := db.Begin()
chunkList := funk.Chunk(users, size)
@TrinhTrungDung
TrinhTrungDung / main_test.go
Created March 20, 2020 16:06
Test benchmark with different batch size
func BenchmarkBulkCreateSize1(b *testing.B) {
benchmarkBulkCreate(1, b)
}
func BenchmarkBulkCreateSize100(b *testing.B) {
benchmarkBulkCreate(100, b)
}
func BenchmarkBulkCreateSize500(b *testing.B) {
benchmarkBulkCreate(500, b)
@TrinhTrungDung
TrinhTrungDung / main_test.go
Last active March 20, 2020 16:33
Test benchmark with different batch sizes
func benchmarkBulkCreate(size int, b *testing.B) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=testuser dbname=testdb password=123456 sslmode=disable")
if err != nil {
fmt.Println(err)
}
defer db.Close()
users := stubUsers(b)
tx := db.Begin()
chunkList := funk.Chunk(users, size)