Mat*_*ish 6 mysql sorting random persistence ruby-on-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 )
Run Code Online (Sandbox Code Playgroud)
然后只需将'sort_id'存储在会话中.然后,我可以像往常一样对random_sorts WHERE sort_id = n ORDER BY position LIMIT ...进行分页.
当然,我必须在那里放一些收割机,以便在一段时间不活动后将它们移除(基于random_sorts.created_at).
不幸的是,我必须在创建新对象时(和/或删除旧对象,尽管删除非常罕见)使排序无效.并且,随着负载的增加,该表的大小/性能(甚至正确索引)会下降.
看起来这应该是一个解决的问题,但我找不到任何这样做的导轨插件......任何想法?谢谢!!