【问题标题】:Optimize displaying results with django-haystack RealTimeSignalProcessor使用 django-haystack RealTimeSignalProcessor 优化显示结果
【发布时间】:2016-12-06 23:06:32
【问题描述】:

我使用Django 作为我的网络应用程序的后端,django-haystack(with Solr) 用于搜索和显示结果。 我使用 RealTimeSignalProccessor 形式 django-haystack ,但我有一个问题:
- 我有一个Auction modelexpires-(DateTimeField)。当我显示结果时,我的操作类似于 e-bay(例如过期时间:1h 23m 5s)。
问题是在显示所有拍卖的页面上,如果您想在每次访问此视图时更新 Expires in 参数(正如我在 django-haystack 文档中所读的那样),您必须使用object.save() 方法来更新 Solr 索引数据库。但是,如果我每次转到列出所有拍卖的视图时都对 30 个结果执行此操作,那么它会非常缓慢并且效率不高。
还有其他解决方案吗?你有什么建议?

【问题讨论】:

  • 您想要更新过期值的原因是什么?对于 expires 大于 utcnow() 的任何值,这不与 DateTimeField asc 排序相同吗?
  • Expires 总是大于 utcnow() ,关于更新 - 我需要显示拍卖结束前的剩余时间。示例:2d 4h 3m 和页面刷新(将其更改为 2d 4h 2m 等)。正如我通过django-haystack 文档所说的那样。你需要在对象上调用 save() 方法来为它更新 Solr 中的参数
  • 是的,但“过期”部分并不需要成为数据库的一部分。在模型或视图中检索它时计算它。为每个页面视图更新 x 行数将导致问题。
  • 实际上是的,我只需要将expiring_date 编入索引即可。我可以计算剩下的时间。不知道为什么我没有那样做......无论如何,将其发布为答案,我会将您的答案标记为正确。谢谢

标签: python django django-models solr django-haystack


【解决方案1】:

无需在您的数据库中不断更新expires_in 字段 - 保留一个带有广告到期时间的expires_at,并在您的模型或视图中计算您的检索方法中剩余的时间。

这样您就可以避免在流量增加时向数据库写入更多数据,并且如果到期日期发生变化,如果人们在您同时查看该页面,您就不会遇到可能的竞争条件'重新更新过期时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2015-12-26
    • 2017-08-15
    相关资源
    最近更新 更多