gpt4 book ai didi

mysql - 稳定/可重复的随机排序(MySQL、Rails)

转载 作者:可可西里 更新时间:2023-11-01 06:44:21 28 4
gpt4 key购买 nike

我想对随机排序的 ActiveRecord 模型列表(来自 MySQL 数据库的行)进行分页。

但是,这种随机化需要在每个 session 的基础上持续存在,以便访问该网站的其他人也会收到一个随机的、可分页的记录列表。

假设有足够多的实体(数万个)将随机排序的 ID 值存储在 session 或 cookie 中太大,所以我必须暂时以其他方式(MySQL、文件等)持久保存它.

最初我认为我可以创建一个基于 session ID 和页面 ID 的函数(返回该页面的对象 ID),但是由于 MySQL 中的对象 ID 值不是连续的(存在间隙),这似乎落空了除了我在戳它。好处是它不需要/需要最少的存储空间,但缺点是它可能实现起来非常复杂,而且可能会占用大量 CPU。

我的感觉是我应该创建一个交集表,例如:

random_sorts( sort_id, created_at, user_id NULL if guest)

random_sort_items( sort_id, item_id, position )

然后只需将“sort_id”存储在 session 中。然后,我可以像往常一样对 random_sorts WHERE sort_id = n ORDER BY position LIMIT... 进行分页。

当然,在一段时间不活动后(基于 random_sorts.created_at),我必须在其中放置某种收割机来移除它们。

不幸的是,我必须在创建新对象(和/或删除旧对象,尽管删除非常罕见)时使排序无效。而且,随着负载的增加,该表(即使正确索引)的大小/性能也会下降。

这似乎应该是一个已解决的问题,但我找不到执行此操作的任何 Rails 插件...有什么想法吗?谢谢!!

最佳答案

MySQL 有一个 RAND 函数,您可以在 ORDER 子句中使用它,传递与用户 session 相关的种子。

按兰德顺序(?)

在哪里?是来自 session 的种子值。这将为您提供跨请求的可重复排序。

关于mysql - 稳定/可重复的随机排序(MySQL、Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com