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

2022-05-01 11:02:42 +08:00
 dearmymy

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

2286 次点击
所在节点    Django
5 条回复
Herobs
2022-05-01 11:19:16 +08:00
Postgres 支持 table sample
kran
2022-05-01 12:18:35 +08:00
id = random(0, max_pk)
select where pk >= #id limit 1
elboble
2022-05-01 13:22:11 +08:00
'''
num = 1
ret = MONGO_DB[db.lower()].aggregate([{"$sample": {"size": num}}])
'''

效率高不高不知道了。
disk
2022-05-01 14:35:56 +08:00
.raw(sql) 用 tablesmaple
yonng
2022-05-01 14:36:16 +08:00
多生成几个随机主键一次查询返回(主键有索引查询应该比较快),降低获取不到数据的可能性。极端情况下一条都没有返回那就再查一次,比如直接 limit 10 然后从 10 条里随机选一条好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX