登录
首页 >  Golang >  Go问答

使用键值提取记录来提高搜索速度和性能

来源:stackoverflow

时间:2024-02-12 22:15:23 277浏览 收藏

本篇文章给大家分享《使用键值提取记录来提高搜索速度和性能》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

尝试通过简单的速度测试来了解 go maps 的工作原理。

仅提取键的值(通过索引)非常快,根据下面的代码,我所说的平均约为 ~50.0μs

当我提取整个记录时,其中包含唯一的键值和一些其他键。我得到的速度在 ~500.0µs 附近波动。我知道这已经很快了,不到一毫秒。但是,如果整个记录已经编入索引,为什么提取整个记录会花费近 10 倍的时间呢?

是否是记录中需要处理的额外键需要更多运行时间?

我在代码中使用地图是否错误?随着时间的推移,数据越来越多,这是否值得担心?

我什至根据我正在搜索的唯一键对我的结构进行排序。

type travelitenariescsv struct {
    ...
    flightnum  int `csv:"flight_num"`
    ...

}
// print code run time
func printexecutiontime(t time.time) {
    fmt.println("execution time: ", time.since(t))
}
flightNum := vars["flight"] // Get unique int value that I need to find across all TravelItenariesCSV.FlightNum keys
    
    startTime := time.Now()
    itenariesMap := map[int]int{}

    for _, v := range s.TravelItenariesCSV { //s.TravelItenariesCSV is a slice of the struct above
        itenariesMap[v.FlightNum] = i
    }

    if v, ok := itenariesMap[i]; ok {
        w.WriteHeader(http.StatusOK)
        fmt.Fprintf(w, utils.PrettyPrint(s.TravelItenariesCSV[v])) // this takes ~500.0µs
        //fmt.Fprintf(w, utils.PrettyPrint(v)) // this takes ~50.0µs

    }
    defer utils.PrintExecutionTime(startTime)

希望主题能够清晰。


正确答案


您对绩效的衡量还包含其他要素:

if v, ok := itenariesmap[i]; ok {
        w.writeheader(http.statusok)
        fmt.fprintf(w, utils.prettyprint(s.travelitenariescsv[v])) // this takes ~500.0µs
        //fmt.fprintf(w, utils.prettyprint(v)) // this takes ~50.0µs

    }
    defer utils.printexecutiontime(starttime)

做了两件事:fmt.printf需要时间。对于 1 个变量,它将是 x,它将相应地缩放 10 倍参数

第二:测量吞吐量时,不要使用 defer:defer 稍后运行(因此称为“defer”)。

因此,要衡量地图性能,您可以执行以下操作:

for _, v := range s.TravelItenariesCSV { //s.TravelItenariesCSV is a slice of the struct above
        itenariesMap[v.FlightNum] = i
    }
utils.PrintExecutionTime(startTime)

rest of the code

这应该会给你一个更好的吞吐量估计

今天关于《使用键值提取记录来提高搜索速度和性能》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>