资讯专栏INFORMATION COLUMN

mgo做分页的几种方法

Terry_Tai / 2314人阅读

摘要:场景当数据两足够大的时候,一页展示不完的时候,我们经常会需要分页的功能。方案三,数据比较大,排序需要排序当数据量比较大的时候,并且需要排序的时候,可以使用这种情况。

场景

当数据两足够大的时候,一页展示不完的时候,我们经常会需要分页的功能。

方案 方案一,数据不是很大

需要排序

    s := globalS.Copy()
    c := s.DB(db).C(collection)
    defer s.Close()
    return c.Find(query).Select(selector).Sort(sort).Skip(100).Limit(20).All(result)

这中情况只适用于数据量比较小的时候,当数据量达到一定量,sort会内存益处报错

方案二,数据比较大

不需要排序

    s := globalS.Copy()
    c := s.DB(db).C(collection)
    defer s.Close()
    return c.Find(query).Select(selector).Skip(100).Limit(20).All(result)

当数据量比较大的时候,可以使用这种情况。如果需要排序,那就取得返回值后在排序。

方案三,数据比较大,排序

需要排序

    var result []interface{}
    s := globalS.Copy()
    c := s.DB(db).C(collection)
    defer s.Close()
    pipeM := []bson.M{
        {"$match": bson.M{"status": "true"}},
        {"$skip": start},
        {"$limit": end},
        {"$sort": bson.M{"height": -1}},
    }
    pipe := c.Pipe(pipeM)
    err = pipe.All(&result)

当数据量比较大的时候,并且需要排序的时候,可以使用这种情况。因为在skip,limit和sort同时出现的时候,由于有优先级,需要无论顺序如何,都是先执行sort,在执行skip,最后执行limit,但是我们使用聚合,也就是mgo里面的pipeline,可以改变执行的先后顺序。

结束语

上面的三种情况都不适用大量的数据,首先是skip的限制,有人建议边查询边排序,我没有尝试

如果数据量过大,我建议使用分库分表的方式来完成,这样加上GO语言的多线程,可以很快的查询和聚合

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19568.html

相关文章

  • 在Redis中进行分页排序查询

    摘要:为查询第几页的页码,为每页显示的条数。当找到所有评论的后,就可以把这些作为去结构中去查询该条评论对应的内容。这样就利用和两种结构在中达到了分页和排序的目的。 Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有条件查询,在面对一些需要分页或排序的场景...

    phodal 评论0 收藏0
  • Elasticsearch如何做到亿级数据查询毫秒级返回?

    摘要:类似于里的推荐商品不断下拉出来一页一页的类似于微博中,下拉刷微博,刷出来一页一页的,你可以用,关于如何使用,自行上网搜索。但是,这种只适合于类似微博下拉翻页的,不能随意跳到任何一页的场景。 showImg(https://segmentfault.com/img/bVbtkDJ?w=400&h=188);本文来源 | https://zhuanlan.zhihu.com/p/... 导...

    jcc 评论0 收藏0
  • 大数据分页方案

    摘要:分页正反偏移数据库自带的和的限制条件为我们创建了分页的查询方式,但是如果利用不对,性能会出现千倍万倍差异。这两条是为查询最后一页的翻页查询用的。缓存和不精准数据量达到一定程度的时候,用户根本就不关心精准的总数没人关心差几个。 软件开发中,常用要用到分页、计算总数,数据量超过千万、上亿的时候,往往count 的需要超过 1s 的执行时间,甚至 3-5s,对于一个追求性能的前沿团队来说,这...

    wuyangnju 评论0 收藏0
  • 大数据分页方案

    摘要:分页正反偏移数据库自带的和的限制条件为我们创建了分页的查询方式,但是如果利用不对,性能会出现千倍万倍差异。这两条是为查询最后一页的翻页查询用的。缓存和不精准数据量达到一定程度的时候,用户根本就不关心精准的总数没人关心差几个。 软件开发中,常用要用到分页、计算总数,数据量超过千万、上亿的时候,往往count 的需要超过 1s 的执行时间,甚至 3-5s,对于一个追求性能的前沿团队来说,这...

    Lavender 评论0 收藏0
  • 大数据分页方案

    摘要:分页正反偏移数据库自带的和的限制条件为我们创建了分页的查询方式,但是如果利用不对,性能会出现千倍万倍差异。这两条是为查询最后一页的翻页查询用的。缓存和不精准数据量达到一定程度的时候,用户根本就不关心精准的总数没人关心差几个。 软件开发中,常用要用到分页、计算总数,数据量超过千万、上亿的时候,往往count 的需要超过 1s 的执行时间,甚至 3-5s,对于一个追求性能的前沿团队来说,这...

    yuanzhanghu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<