我有一个视图,它返回与我的一个模型中随机选择的行相关的数据。我知道order_by('?')及其性能问题,我想避免在我看来使用order_by('?')。
因为我模型中的数据变化很少(如果有的话),我考虑在请求之间将整个模型缓存在内存中的方法。我知道我要处理的记录有多少,而且我很容易记住内存。如果模型确实以某种方式改变,我可以在那时重新生成缓存。
我的策略合理吗?如果是这样,我该如何实现它?如果没有,我怎样才能从模型中快速选择一个随机行,如果有的话很少变化?
答案 0 :(得分:0)
如果你知道对象的id及其范围,你可以随机化id,然后查询数据库
答案 1 :(得分:0)
更好的方法可能是在缓存中保留对象的数量,并在需要时简单地检索一个随机数:
item_number = random.randint(MODEL_COUNT)
MyModel.objects.all()[item_number]