引言
本文是我在工作中遇到A/B Test的需求,经过几天的研究的一篇心得笔记,不一定多专业,希望能给有类似需求的同行一些参考和灵感,在学习的过程中,也发现一些比较优秀的国外博文,我打算在近期翻译几篇,而不是把只言片语融入到本文当中,本文的重点仍然是drupal A/B Test的解决方案,介绍性的文字来源于最近几天的学习心得,是给不熟悉A/B Test的同行的一些入门介绍。
基于Drupal平台的高性能网站架构与研究实验室
本文是我在工作中遇到A/B Test的需求,经过几天的研究的一篇心得笔记,不一定多专业,希望能给有类似需求的同行一些参考和灵感,在学习的过程中,也发现一些比较优秀的国外博文,我打算在近期翻译几篇,而不是把只言片语融入到本文当中,本文的重点仍然是drupal A/B Test的解决方案,介绍性的文字来源于最近几天的学习心得,是给不熟悉A/B Test的同行的一些入门介绍。
2,171 Views
在我们的业务需求当中,经常有需要取得随机结果的需求,比如随机会员,随机文章列表,随机文章跳转等等,我们大家都知道MYSQL的ORDER BY RAND()有性能问题,本文翻译自国外的一篇博文,大家来学习一下作者是如何解决这个问题的,这个解决方案具有在生产环境中实施的可行性。
译文开始:
作为第一个例子,我们假设数据的ID从1开始,并且在1和最大值之间是连续的。
第一个思路:我们可以简化整个工作,如果我们可以预先在应用层计算出随机ID
SELECT MAX(id) FROM random; ## 在应用层生成随机ID <random-id> SELECT name FROM random WHERE id = <random-id>
因为MAX(id) == COUNT(id), 我们仅仅是在1和最大值之间生成了随机数,然后传给数据库取出随机记录。
第一个SELECT是已经被优化好的,不需要任何计算。第二个是eq_ref(参见MYSQL EXPLAN语句)是一个常量,所以也非常快。
在应用层做这件事真的是必要的么?我们不能在数据库中做么?
阅读全文 《MYSQL获取随机结果集的解决方案》
2,977 Views