稳定/可重复的随机排序(MySQL,Rails)

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

但是,这种随机化需要在每个会话的基础上持续存在,以便访问该网站的其他人也可以获得随机的,可分页的记录列表.

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

最初我以为我可以根据会话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’存储在会话中.然后,我可以像往常一样对random_sorts WHERE sort_id = n ORDER BY position LIMIT …进行分页.

当然,我必须在那里放一些收割机,以便在一段时间不活动后将它们移除(基于random_sorts.created_at).

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

看起来这应该是一个解决的问题,但我找不到任何这样做的导轨插件……任何想法?谢谢!!

MySQL有一个RAND函数,你可以在你的ORDER子句中使用,传递绑定到用户会话的种子.

兰德令(?)

哪里?是会话的种子值.这将为您提供跨请求的可重复排序.

相关文章
相关标签/搜索