微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 根据喜欢计数和创建时间对实体进行评分

数据库读取时,我想基于两个因素对Post实体进行排序:

>喜欢数(越多越好)
>年龄(越新越好)

目前我已经这样实现了(作为计算值):

@Entity
public class Post {

    // divide timestamp by a day length so after each day score decrements by 1
    @Formula("UNIX_TIMESTAMP(creation_date_time) / 24 * 60 * 60 * 1000 + likes_count")
    private long score;

    @CreationTimestamp
    private LocalDateTime creationDateTime;

    @Min(0)
    private long likesCount;
}

它工作正常但可能不是最好的方法,因为:

>我认为RDBMS不能为得分属性制作任何索引.
>硬编码函数UNIX_TIMESTAMP()特定于MysqL.因此,如果我想在我的测试环境中使用另一个数据库(比如H2),这将导致问题.

最佳答案
使用数据库触发器更新/维护这些侧聚合表.为这些事情运行繁重的预定工作(导致负载高峰)真的没有意义……

此外,WHERE子句下面永远不会使用索引.永远不能.

UNIX_TIMESTAMP(creation_date_time) / 24 * 60 * 60 * 1000 + likes_count

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐