【问题标题】:Capturing Implicit Signals of Interest in Django在 Django 中捕获隐含的感兴趣信号
【发布时间】:2010-10-29 19:11:51
【问题描述】:

设置背景:我感兴趣:

  • 在用户浏览网站时捕获对书籍感兴趣的隐含信号。该网站使用 mysql、memcached、ngnix 和 apache 用 django (python) 编写

假设,例如,我的网站销售书籍。当用户浏览我的网站时,我想跟踪他们查看了哪些书籍,以及查看了多少次。

并不是我会以这种方式存储数据,但理想情况下我可以即时访问以下结构:

{user_id : {book_id: number_of_views, book_id_2: number_of_views}}

我意识到这里有几种方法:

  • 一些平面文件日志
  • 每次都将对象写入数据库
  • 写入 memcached 中的对象

我真的不知道性能影响,但我宁愿不要在每个页面视图上都写入数据库,而且写入日志和稍后计算结构的延迟似乎不够快,无法提供好的建议在您使用该网站时即时进行,memcached 方法看起来不错,但是将这个 obj 保存在内存中是有代价的:您可能会丢失它,而且它永远不会被写入“永久”的某个地方。

你会建议什么方法? (不必是上述之一)谢谢!

【问题讨论】:

    标签: python mysql django collaborative-filtering


    【解决方案1】:

    如果这些数据不是一个可能或可能不可用的不重要统计数据,我建议采用简单的方法并使用模型。它肯定会每次都访问数据库。

    除非您绝对肯定这些查询实际上会降低整体体验,否则无需担心。即使您优化了这个,其他意外查询也很有可能会浪费更多的 CPU 时间。如果您正在测试所有其他查询,我假设您不会问这个问题。那么,为什么要冒险对这个进行过早优化呢?

    模型方法的一个优点是有一个适当的 API。当您测试并决定优化后,您可以保留此 API 并使用其他东西更改底层模型(这很可能比模型更复杂)。

    我肯定会先选择一个模型,看看它的表现如何。 (以及项目的其他部分如何执行)

    【讨论】:

    • +1:只写数据库,不用担心。 I/O 必须发生在某个地方,所以就去做吧。信任 ORM 缓存和 DB 缓存。你的其他东西(验证用户,为他们查询东西)完全支配性能。不会注意到日志记录。
    【解决方案2】:

    你会建议什么方法? (不必是上述之一)谢谢!

    hmmmm ...这就像在一个只有一扇门的四壁房间里说我想离开房间但不通过唯一的门...

    我曾经读过一篇文章(现在无法获取链接),它说 memcache 可以处理内存中的大量(facebook 使用它)数据集,而性能几乎没有下降......我的建议是你需要在 memcache 上进行更多探索,我认为它可以解决问题。

    【讨论】:

    • 没错,我可以看到使用 memcached - 只是想知道它是否是唯一的出路(或最好的出路?)
    【解决方案3】:

    可以探索文档数据存储(mongo/couchdb)或持久键值存储(tokyodb、memcachedb 等)。

    我没有明确的建议,因为最终解决方案取决于多种因素 - 负载、您学习/部署新技术的意愿、数据大小...

    【讨论】:

      【解决方案4】:

      在我看来,一种方法可能是使用 memcached 来保留计数器,但定期运行一个 cron 来将 memcached 中的值存储到数据库或磁盘。这样一来,您将获得 memcached 的所有性能,但在发生崩溃的情况下,您丢失的数据不会超过几分钟。

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 2011-08-10
        • 1970-01-01
        • 2022-01-13
        • 2012-02-22
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多