123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package main
- import (
- "database/sql"
- "fmt"
- "log"
- "math/rand"
- "sync"
- "time"
- _ "xugu_driver/xugu"
- )
- // 创建测试表
- const createTableQuery = `
- CREATE TABLE IF NOT EXISTS test_table (
- id INT AUTO_INCREMENT PRIMARY KEY,
- value VARCHAR(255) NOT NULL
- );`
- // 插入数据的 SQL 语句
- const insertQuery = `INSERT INTO test_table (value) VALUES (?)`
- // 读取数据的 SQL 语句
- const selectQuery = `SELECT value FROM test_table WHERE id = ?`
- // 测试的并发度
- const concurrency = 10
- // 初始化随机种子
- func init() {
- rand.Seed(time.Now().UnixNano())
- }
- func main() {
- db, err := sql.Open("xugusql", "IP=10.28.20.101;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5190;AUTO_COMMIT=on;CHAR_SET=UTF8")
- if err != nil {
- log.Fatal(err)
- }
- // 创建测试表
- _, err = db.Exec(createTableQuery)
- if err != nil {
- log.Fatalf("Failed to create test table: %v", err)
- }
- // 使用 WaitGroup 管理并发操作
- var wg sync.WaitGroup
- // 记录成功和失败的操作次数
- var successCount, failureCount int64
- var mu sync.Mutex
- // 运行并发操作
- for i := 0; i < concurrency; i++ {
- wg.Add(1)
- go func() {
- defer wg.Done()
- for {
- // 随机选择插入或查询操作
- if rand.Intn(2) == 0 {
- // 执行写操作 // `INSERT INTO test_table (value) VALUES (?)`
- _, err := db.Exec(insertQuery, fmt.Sprintf("value-%d", rand.Int()))
- mu.Lock()
- if err != nil {
- failureCount++
- } else {
- successCount++
- }
- mu.Unlock()
- } else {
- // 执行读操作
- id := rand.Intn(1000) + 1
- var value string //`SELECT value FROM test_table WHERE id = ?`
- err := db.QueryRow(selectQuery, id).Scan(&value)
- mu.Lock()
- if err != nil {
- failureCount++
- } else {
- successCount++
- }
- mu.Unlock()
- }
- // 打印当前成功和失败的操作次数
- mu.Lock()
- log.Printf("Success: %d, Failure: %d", successCount, failureCount)
- mu.Unlock()
- // 短暂休眠以防止过度频繁的请求
- time.Sleep(100 * time.Millisecond)
- }
- }()
- }
- // 等待所有操作完成(实际上这个程序不会停止,因为循环是无限的)
- wg.Wait()
- defer db.Close()
- }
|