V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dearmymy
V2EX  ›  Django

请问 django 怎么高效的获取范围内一条随机数据

  •  
  •   dearmymy · 2022-05-01 11:02:42 +08:00 · 2246 次点击
    这是一个创建于 697 天前的主题,其中的信息可能已经有所发展或是发生改变。

    几百万数据每次获取一个随机数据 我查询有用 oder_by(?) 还有获得范围内主键 id ,做 random ,但是由于我删除过很多数据,导致主键 id 并不连续,请问这个怎么处理 或者还有什么更好的方法

    5 条回复    2022-05-01 14:36:16 +08:00
    Herobs
        1
    Herobs  
       2022-05-01 11:19:16 +08:00 via iPhone
    Postgres 支持 table sample
    kran
        2
    kran  
       2022-05-01 12:18:35 +08:00 via Android   ❤️ 2
    id = random(0, max_pk)
    select where pk >= #id limit 1
    elboble
        3
    elboble  
       2022-05-01 13:22:11 +08:00
    '''
    num = 1
    ret = MONGO_DB[db.lower()].aggregate([{"$sample": {"size": num}}])
    '''

    效率高不高不知道了。
    disk
        4
    disk  
       2022-05-01 14:35:56 +08:00
    .raw(sql) 用 tablesmaple
    yonng
        5
    yonng  
       2022-05-01 14:36:16 +08:00
    多生成几个随机主键一次查询返回(主键有索引查询应该比较快),降低获取不到数据的可能性。极端情况下一条都没有返回那就再查一次,比如直接 limit 10 然后从 10 条里随机选一条好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2423 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.