我正在用 Golang 和 Sqlite3 编写一个网站,我预计每天有几分钟的时间每秒大约有 1000 次并发写作,所以我做了以下测试(忽略错误检查以看起来更干净):
t1 := time.Now()
tx, _ := db.Begin()
stmt, _ := tx.Prepare("insert into foo(stuff) values(?)")
defer stmt.Close()
for i := 0; i < 1000; i++ {
_, _ = stmt.Exec(strconv.Itoa(i) + " - ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,./;'[]-=<>?:()*&^%$#@!~`")
}
tx.Commit()
t2 := time.Now()
log.Println("Writing time: ", t2.Sub(t1))
写入时间约为0.1秒。然后我将循环修改为:
for i := 0; i < 1000; i++ {
go func(stmt *sql.Stmt, i int) {
_, err = stmt.Exec(strconv.Itoa(i) + " - ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,./;'[]-=<>?:()*&^%$#@!~`")
if err != nil {
log.Fatal(err)
}
}(stmt, i)
}
这给了我神圣的 46.2 秒!我运行了很多次,每次都超过 40 秒!有时甚至超过一分钟!由于 Golang 并发处理每个用户,是否意味着我必须切换数据库才能使网页正常工作?谢谢!
呼啦一阵风
相关分类