【问题标题】:Permanent table, temp tables or php session?永久表、临时表或 php 会话?
【发布时间】:2011-06-20 05:23:34
【问题描述】:

我的网络应用提供个性化推荐。当用户开始使用它时,大约 1000 多行被插入到一个大推荐表中,与数据库中的其他表相关联。用户投票的每个项目都会影响所有这 1000 多行。

由于推荐信息仅在会话期间有用,并且由于推荐表越来越大,我们希望切换到更合适的方法。一旦用户会话结束,就有可能删除相关行。我猜 PHP 会话数组或临时表更适合这种情况?

【问题讨论】:

    标签: sql php temp-tables


    【解决方案1】:

    每个会话一个临时表会导致目录污染,因此不推荐。

    您是否考虑过实际保留数据,以便定期挖掘数据以改进建议?

    【讨论】:

    • 它不会导致一个巨大的、缓慢的桌子吗? 1000 行乘以曾经使用过该网站的每个用户?我确实保存了用户的实际选择。
    • 我也想知道性能方面最好的方法是什么。一张大桌子要走吗?
    • 嗯,由您来确定要保留哪些数据以及如何最好地存储它...说实话,每个会话有 1k+ 写入听起来有点疯狂。所以会话似乎是正确的,如果只是为了避免在每个页面视图上重新查询数据。 :-) 尽管如此,您可能想要存储一些感兴趣的东西(可能以某种聚合格式)。
    • 你认为php session会比从大表中删除行更好吗?
    • 您想进行测试,但我怀疑通过序列化/反序列化到您将插入/选择/删除到索引表的文件,您将获得更少的开销。
    【解决方案2】:

    首先:考虑重新设计你的数据结构,我认为这不是最优的。 将用户的推荐存储在表 user-recommendeditem-score 中:我认为不需要临时表或其他任何东西。 否则,您可以开始使用会话,但您应该仔细封装代码,以便在该解决方案不再可维护的情况下进行更改。

    【讨论】:

      【解决方案3】:

      我怀疑该方法存在缺陷 - 每个用户有 1000 多个推荐?他们曾经了多少?如果您不知道该问题的答案 - 那么您需要花一些时间思考为什么您不知道答案。

      用户投票的每个项目都会影响所有这 1000 多行

      您确定您的数据已正确规范化吗?

      但暂时把它放在一边。在数据库中生成/存储的正确位置 - 明确设计了关系数据库,并且在生成和维护表格数据集方面比传统编程语言更有效。

      【讨论】:

      • 事情是,如果你想从所有可能的项目中得到最好的推荐,你必须根据用户的选择对所有的项目进行评分,然后选择最热门的项目
      猜你喜欢
      • 2011-01-04
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2011-12-31
      • 2016-10-25
      相关资源
      最近更新 更多