SQL请求优化——浏览次数统计,SQL写操作稀释

引言

  前几天做了这么一个东西:一个游戏中有个活动页面,活动页面有个商品,商品下面要显示该商品实浏览次数,就相当于是用户每出发一次请求这个浏览总次数都会添加一次,这个问题很简单,每次浏览的时候去数据库中进行“+1”操作即可。但是做完之后想想,由于这个浏览总次数实时性要求不是那么高,我就可以对sql请求进行稀释、减少“+1”的请求次数,这样可以减少与数据库交互时“写操作”所浪费的资源。

实现

  这种特殊环境下的sql请求是这样的,每次要执行浏览次数“+1”操作时,我们产生一个1~N的随机数R,如果R%N == 0则进行“+N”操作,N可以根据浏览总次数的实时性等级进行适当的调整,实时性越高,N越小,写操作命中的几率越大,否则反之,看看下面的示意图:

  下面是部分代码(只是测试模拟的,重在说明意思):

 1 class Addtimes{
 2     /**
 3      * 假设这个是db对象
 4      */
 5     private static $db;
 6
 7     /**
 8      * 测试“浏览次数”稀释
 9      * int $hit 稀释的倍率,平均$hit进行一次记录
10      */
11     public static function doadd($hit){
12         $hit     = intval($hit);
13         $r         = rand(1,$hit);
14         $r % $hit == 0 && self::$db->query("update testtimes set times=times+{$hit}");
15     }
16 }

  这样就从一定程度上面减少了每次进行写操作,把N次写操作合并为一次。

总结

  这个是一个小小的优化,但他的局限性很大,使用的时候要注意下面几点:

  1. 使用之前要考虑数据实时性的要求,实时性要求高的还是别用了。
  2. 这个预期总次数一定要大于N,最好是好多倍,由于是随机数进行的,如果总次数太少会出现很大的误差。
  3. 如果可以使用缓存的话,会更好,比如将次数存储在memchached、redis、apc等缓存中,每次都进行“+1”操作,这样就可以实现高实时性;命中次数逻辑依然存在,当命中时进行数据持久化(回写db),这时候这个回写次数N就可以适当的调大。

  本文版权归作者([email protected])和博客园共有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

时间: 2024-10-14 20:56:33

SQL请求优化——浏览次数统计,SQL写操作稀释的相关文章

SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过拆分SQL来优化的博文,最近刚好遇到一个实际案例,比较有代表性,现分享出来, 我们来通过一个案例来分析,为什么拆分语句可以提高SQL执行效率,更重要的是弄清楚,拆分前为什么慢,拆分后为什么快了? 幼稚的话,各位看官莫笑 先看一下相关表的数据量,大表也有5900多万,小表有160多万 (声明:我从来没

SQL Server Log文件对磁盘的写操作大小是多少

原文:SQL Server Log文件对磁盘的写操作大小是多少 SQL Server 数据库有三种文件类型,分别是数据文件.次要数据文件和日志文件,其中日志文件包含着用于恢复数据库的所有日志信息,SQL Server总是先写日志文件ldf,数据变化写入mdf则可以滞后,所以日志写入的速度在一定程序上决定了SQL Server所能承载的写事务量,那么ldf写入大小是多少呢? 要知道SQL Server写 Log的大小,这里使用工具Process Monitor 这里设置一个Filter,以满足只收

XEvent – SQL Server Log文件对磁盘的写操作大小是多少

原文:XEvent – SQL Server Log文件对磁盘的写操作大小是多少 本篇是上一篇SQL Server Log文件对磁盘的写操作大小是多少的续,使用XEvent收集SQL Server Data文件和Log文件的写大小,脚本如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

MySQL查询某个字段为某值的次数统计SQL语句

SELECT GoodID,sum(if(Level = 1, 1, 0)) as Better,sum(if(Level = 0, 1, 0)) as Nomal,sum(if(Level = -1, 1, 0)) as Bad from evaluates GROUP BY GoodID;

dedecms浏览次数统计需要的设置

如果想显示点击次数,请增加view参数,即把下面JS调用放到文档模板适当位置<script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id'/}&mid={dede:field name='mid'/}" language="javascript"></script>普通计数器为<script src="{

每条新闻的浏览次数统计,该如何实现呢?

http://bbs.csdn.net/topics/391814418?page=1 1.第一次启动的时候肯定是把所有文章加载到缓存里的,每次点击动态更新的是缓存中的值,用定时任务最后更新到数据库中,我们是这么做的 2.PV有多少?大部分的情况用Redis之类的缓存就能够满足你的需求吧如果Redis都顶不住了,再考虑消息队列缓冲一下...如果还顶不住,你确定这个是你能解决的?让你们老板请几个NB的SA帮忙架构架构 3.定时任务应该也行,先把数据存在context里面. 4.用免费的第三方统计平

SQLAdvisor美团SQL索引优化建议工具

SQLAdvisor美团SQL索引优化建议工具 前言 Part1:写在最前 SQLAdvisor是美团开源的一款SQL索引优化建议工具,是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具.它基于MySQL原生态词法解析,结合分析SQL中的where条件.聚合条件.多表Join关系 给出索引优化建议.目前SQLAdvisor在美团点评内部广泛应用,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致.本文记录对该工具的初步安装和

SQL索引优化工具SQLAdvisor介绍

SQLAdvisor是美团开源的一款SQL索引优化建议工具,是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具.它基于MySQL原生态词法解析,结合分析SQL中的where条件.聚合条件.多表Join关系 给出索引优化建议.目前SQLAdvisor在美团点评内部广泛应用,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致. 博文记录对该工具的初步安装和基本使用 一.软件的安装部署 [[email protected] opt

dedecms设置文档默认浏览次数为0

织梦dedecms文档默认浏览次数是随机数,每次发布新文档时会自动生成一个50-200之间的随机数字,这样虽然可以让文档在前台显示起来比较“好看”些,但是相信部分用户还是喜欢从0开始计算的真实浏览次数,织梦也提供了修改默认浏览次数的设置. 操作步骤: 1.进入网站后台,在“系统——系统基本参数——其它选项”中找到“文档默认点击数(-1表示随机50-200):”: 2.把输入框里的值修改为0: 3.然后点击确认保存设置,之后发布的文档默认浏览次数就是0了. 原文地址:https://www.cnb