客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。每次页面刷新就从队列表读出当前的广告记录,然后将该记录删除。也就是说,每一次页面请求都会有一次数据查询读取和删除操作。现在网站还没开始推广,运行当然没问题。我担心以后如果访问量大了,我这种使用队列表的方案,性能会不会有问题?请各位说说看法?多谢!

解决方案 »

  1.   

    MYSQL表的引擎是什么?是否有TRIGGER、日志?
      

  2.   

    特别是对于多个几乎同时的请求,mysql会怎么处理啊?
      

  3.   

    MYSQL表的引擎是什么?是否有TRIGGER、日志?
    --------------------------------------------
    表引擎是MyISAM,没有TRIGGER、日志
      

  4.   

    如果用户多,会有问题。这也是为什么很多网站都会有限制两次刷新页面的时间。 比如csdn一分钟会才会去查询数据库。建议使用静态页面,由你的后台定时(比如每小时,或每5分钟,生成这些广告的静态页面,比如 ad1.html, ad2.html, ad3.html, 这样客户端的脚本只是访问这些静态页面,不会造成访问数据的压力。
      

  5.   

    这样试试,增加一个字段,用做删除标志,显示完后,将此字段置为0,
    查询时加入条件,删除标志<>0,定时运行删除 删除标志=0的记录。
      

  6.   

    思路与8楼上略有差别:
    加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了
      

  7.   


    这种方案,还是会造成很多数据库访问啊。 如果是想减轻数据库访问,则建议把这些HTML码生成到文件,然后client的脚本直接去取下一个 xxxx.html 放入到某个广告的iframe中。
      

  8.   

    还有一种思路:就是将要显示的数据COPY到客户端,从客户端读取内容,
    在服务器表中FLAG置为0
      

  9.   


    1。当广告客户完成广告申请的提交,广告数据插入/更新到数据中。
    2。在insert/update你的程序中,直接生成相对应的HTML代码保存为广告表主键对应的html文件。假设你广告主键为数字。则你的服务器上对应目录中有 1.html,2.html
    3。当普通用户通过浏览器访问时,你可以通过自定一个函数来响应普通用户的请求,随机调出一个 nnn.htm 广告页。 对各广告的权重,你可以直接在application级放一个权重数组。每三个小时重新访问数据库对这个数组刷新。
      

  10.   

    实时的对数据库读取显然是不可取的。
    这个时候你要做的就是CACHE数据,当然这个更新CACHE里面陈旧数据的时间你要自己权衡。
      

  11.   


    1. 广告内容单独生成html文件的建议不错。
    2. 这个网站是php+apache+mysql架构, 没有类似application这样的公用全局变量。我在考虑用一个xml文件替代数据库中的队列表,这样可以大幅减少对数据库读写。只是我不是很清楚在访问量很大情况下,读写文件的效率会比读写数据库高很多吗?哪位来说说?
      

  12.   


    因为客户要求每次访问页面时,广告的内容都要不一样,需要按等级和权重进行轮换,CACHE了好像就很难满足了吧?
      

  13.   


    不建议,访问XML文件,如果你是以文本格式访问,则效率并不高。如果以XML DOM来访问更慢。
      

  14.   

    又查了下资料,好像对于高性能数据读写的需求,mysql的内存表比较适用?那个队列表其实就是临时表的性质,应该可以建成内存表。大家觉得怎么样?
      

  15.   

    这个不要全压给数据库。
    广告这类业务,可以借助于中间的Cache层,如Memcached,有新的广告加入或删掉更新相应的Cache
    每次出现不的值时,可以用程Rand出那个区间,然后在那个Cache里来取就行了。如果你的数据库设计的合理,能够以HASH结构存放,也是不用担心的。这个还是关建看你怎么分解你的业务了。
      

  16.   

    这个实时性不必那么强求,google也会有1分钟左右的延时