【问题标题】:Selecting a random row in Django, quickly在 Django 中快速选择随机行
【发布时间】:2016-04-27 05:55:08
【问题描述】:

我有一个视图,它返回与我的一个模型中随机选择的行相关的数据。我知道 order_by('?') 及其性能问题,我想避免在我看来使用 order_by('?')。

因为我的模型中的数据很少更改(如果有的话),我正在考虑在请求之间将整个模型缓存在内存中的方法。我知道我正在处理多少条记录,并且我很乐意接受记忆打击。如果模型确实发生了某种变化,我可以在那个时候重新生成缓存。

我的策略合理吗?如果是这样,我该如何实施?如果没有,我怎样才能快速从一个很少改变(如果有的话)的模型中选择一个随机行?

【问题讨论】:

    标签: django performance caching random


    【解决方案1】:

    如果您知道对象的 id 及其范围,您可以随机化这些 id,然后查询数据库

    【讨论】:

      【解决方案2】:

      更好的方法可能是在缓存中保留 number 个对象,并在需要时简单地检索一个随机对象:

      item_number = random.randint(MODEL_COUNT)
      MyModel.objects.all()[item_number]
      

      【讨论】:

      • 我如何实际实现缓存?全局变量?类似的东西的 Django 模式是什么?
      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多