gpt4 book ai didi

database - 如何在 go 中编写长时间运行的请求?

转载 作者:IT王子 更新时间:2023-10-29 02:05:29 25 4
gpt4 key购买 nike

到目前为止的故事。我们正在考虑放弃 perl。候选人是go或node。为此,我们在 Dancer2、Flask、Node 和 Go 中为我们拥有的长时间运行的数据库查询编写了简单的包装器。我让它们全部启动并运行,所以我在轻负载下进行了一些基准测试。然后我决定强调应用程序。每个框架都能够应对

ab -n 1000 -c 100 http://localhost:8080/

除了去。如果我不限制连接那么我会得到错误“连接太多”,如果我将连接限制为 100,那么 ab 会给出超时错误并退出。

我的要点 https://gist.github.com/2d8473ce576cab5f7c66使用代码。我应该更改什么,以便我可以在负载下使用 go server?

最佳答案

问题看起来是您的数据库因同时连接过多而重载。请记住,Go 是一种真正的并发语言。

您是否尝试过将 db.SetMaxOpenConns(1000) 设置为更小的数字,例如 db.SetMaxOpenConns(10)

或者你可以像这样限制同时运行的 goroutines 的数量

全局声明这些

const maxAtOnce = 50

var limiter = make(chan struct{}, maxAtOnce)

func init() {
// Fill up with tokens
for i := 0; i < maxAtOnce; i++ {
limiter <- struct{}{}
}
}

然后在您的 getTimeSheet 中将其放在开头

// take a token
<-limiter
// give it back on exit
defer func() {
limiter <- struct{}{}
}()

关于database - 如何在 go 中编写长时间运行的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28812293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com