所以我一直在重写一个旧的 PHP 系统来寻找一些性能提升,但我没有得到任何提升。问题似乎出在我正在对 Mysql 执行的插入操作中。
因此,PHP 对 CSV 文件进行一些处理、进行一些散列处理并在 MySQL 中插入大约 10k 行需要 40 秒(未优化的代码)。
另一方面,现在 Go 去掉了任何处理,同样插入 10k(空)行需要 110 秒。
两个测试都在同一台机器上运行,我使用的是 go-mysql-driver。
现在来看一些 Go 代码:
这是极其简单的代码,与 PHP 相比,这仍然需要将近 2 分钟,而 PHP 的时间不到一半。
db := GetDbCon()
defer db.Close()
stmt, _ := db.Prepare("INSERT INTO ticket ( event_id, entry_id, column_headers, column_data, hash, salt ) VALUES ( ?, ?, ?, ?, ?, ? )")
for i := 0; i < 10000; i++{
//CreateTicket(columns, line, storedEvent)
StoreTicket(models.Ticket{int64(0), storedEvent.Id, int64(i),
"", "", "", "", int64(0), int64(0)}, *stmt)
}
//Extra functions
func StoreTicket(ticket models.Ticket, stmt sql.Stmt){
stmt.Exec(ticket.EventId, ticket.EntryId, ticket.ColumnHeaders, ticket.ColumnData, ticket.Hash, ticket.Salt)
}
func GetDbCon() (sql.DB) {
db, _ := sql.Open("mysql", "bla:bla@/bla")
return *db
}
那么是我的代码,go-mysql-driver 还是这是正常的,PHP 在插入记录方面真的很快吗?
==编辑==
根据要求,我使用 tcpdump 记录了 PHP 和 Go 运行:文件:
比较这两个日志,我很难得出任何结论,两者似乎都在来回发送相同大小的数据包。但是使用 Go(~110) mysql 处理请求的时间几乎是 PHP(~44) 的两倍,Go 似乎在再次发送新请求之前等待稍长一些(尽管差异很小)。