日期:2014-05-16  浏览次数:20669 次

高负载下,Mysql表的读写性能问题
客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。

每次页面刷新就从队列表读出当前的广告记录,然后将该记录删除。也就是说,每一次页面请求都会有一次数据查询读取和删除操作。现在网站还没开始推广,运行当然没问题。我担心以后如果访问量大了,我这种使用队列表的方案,性能会不会有问题?

请各位说说看法?多谢!


------解决方案--------------------
如果用户多,会有问题。这也是为什么很多网站都会有限制两次刷新页面的时间。 比如csdn一分钟会才会去查询数据库。

建议使用静态页面,由你的后台定时(比如每小时,或每5分钟,生成这些广告的静态页面,比如 ad1.html, ad2.html, ad3.html, 这样客户端的脚本只是访问这些静态页面,不会造成访问数据的压力。
------解决方案--------------------
思路与8楼上略有差别:
加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了
------解决方案--------------------
探讨
思路与8楼上略有差别:
加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了

------解决方案--------------------
这个做起来有些困难,你要分别针对每个客户来做不同的可以。
但是你要保证刷新的是不一样,有些困难。

大部分,都是根据权重来和时间进行搭配,设置好不同时间显示什么内容。
生成时间,用户,广告的关系表。

查询的时候根据当前时间,用户,提取出对应的广告!
------解决方案--------------------
探讨
这个做起来有些困难,你要分别针对每个客户来做不同的可以。
但是你要保证刷新的是不一样,有些困难。

大部分,都是根据权重来和时间进行搭配,设置好不同时间显示什么内容。
生成时间,用户,广告的关系表。

查询的时候根据当前时间,用户,提取出对应的广告!

------解决方案--------------------
探讨
2. 这个网站是php+apache+mysql架构, 没有类似application这样的公用全局变量。我在考虑用一个xml文件替代数据库中的队列表,这样可以大幅减少对数据库读写。只是我不是很清楚在访问量很大情况下,读写文件的效率会比读写数据库高很多吗?哪位来说说?

------解决方案--------------------
这个不要全压给数据库。
广告这类业务,可以借助于中间的Cache层,如Memcached,有新的广告加入或删掉更新相应的Cache
每次出现不的值时,可以用程Rand出那个区间,然后在那个Cache里来取就行了。

如果你的数据库设计的合理,能够以HASH结构存放,也是不用担心的。

这个还是关建看你怎么分解你的业务了。
------解决方案--------------------

楼主,你思路有点问题。其实楼主可以使用下面方法: 
1 在程序中缓存这些广告相关内容。
2 定时去读取数据库内容更新缓存中内容;这样数据库使用次数是可控的。
【广告最长生效时间为 间隔时间 + 1 】
3 广告内容最后就是弄好,放在一个服务器上让客户自己下载就可以了。