高负载下,Mysql表的读写性能问题

delphi_compiler 2009-04-11 10:41:45
客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。

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

请各位说说看法?多谢!
...全文
266 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphi_compiler 2009-04-16
  • 打赏
  • 举报
回复
多谢大家赐教,结贴!
phoenix_pj 2009-04-15
  • 打赏
  • 举报
回复
这个实时性不必那么强求,google也会有1分钟左右的延时
phoenix_pj 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 phoenix_pj 的回复:]
思路与8楼上略有差别:
加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了
[/Quote]

如果觉得这样与数据库交互太频繁,那就一次从数据库取出之后要显示的n个广告,放在内存中,至于这个n为几,那就要看楼主的需求了,如果需求中对实时性要求高些,那就少取一些,如果对效率要求更严格那就多取几个
stareman 2009-04-15
  • 打赏
  • 举报
回复
关注...
ljf_ljf 2009-04-15
  • 打赏
  • 举报
回复

楼主,你思路有点问题。其实楼主可以使用下面方法:
1 在程序中缓存这些广告相关内容。
2 定时去读取数据库内容更新缓存中内容;这样数据库使用次数是可控的。
【广告最长生效时间为 间隔时间 + 1 】
3 广告内容最后就是弄好,放在一个服务器上让客户自己下载就可以了。
delphi_compiler 2009-04-15
  • 打赏
  • 举报
回复
up
wu_bx 2009-04-14
  • 打赏
  • 举报
回复
这个不要全压给数据库。
广告这类业务,可以借助于中间的Cache层,如Memcached,有新的广告加入或删掉更新相应的Cache
每次出现不的值时,可以用程Rand出那个区间,然后在那个Cache里来取就行了。

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

这个还是关建看你怎么分解你的业务了。
WWWWA 2009-04-14
  • 打赏
  • 举报
回复
一般不推荐用内存表,除非你的内存足够大
delphi_compiler 2009-04-14
  • 打赏
  • 举报
回复
又查了下资料,好像对于高性能数据读写的需求,mysql的内存表比较适用?那个队列表其实就是临时表的性质,应该可以建成内存表。大家觉得怎么样?
懒得去死 2009-04-13
  • 打赏
  • 举报
回复
实时的对数据库读取显然是不可取的。
这个时候你要做的就是CACHE数据,当然这个更新CACHE里面陈旧数据的时间你要自己权衡。
ACMAIN_CHM 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 taoistong 的回复:]
这个做起来有些困难,你要分别针对每个客户来做不同的可以。
但是你要保证刷新的是不一样,有些困难。

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

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

1。当广告客户完成广告申请的提交,广告数据插入/更新到数据中。
2。在insert/update你的程序中,直接生成相对应的HTML代码保存为广告表主键对应的html文件。假设你广告主键为数字。则你的服务器上对应目录中有 1.html,2.html
3。当普通用户通过浏览器访问时,你可以通过自定一个函数来响应普通用户的请求,随机调出一个 nnn.htm 广告页。 对各广告的权重,你可以直接在application级放一个权重数组。每三个小时重新访问数据库对这个数组刷新。
taoistong 2009-04-13
  • 打赏
  • 举报
回复
这个效率不低的,完全的查询操作!
taoistong 2009-04-13
  • 打赏
  • 举报
回复
这个做起来有些困难,你要分别针对每个客户来做不同的可以。
但是你要保证刷新的是不一样,有些困难。

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

查询的时候根据当前时间,用户,提取出对应的广告!
wwwwb 2009-04-13
  • 打赏
  • 举报
回复
还有一种思路:就是将要显示的数据COPY到客户端,从客户端读取内容,
在服务器表中FLAG置为0
ACMAIN_CHM 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 phoenix_pj 的回复:]
思路与8楼上略有差别:
加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了
[/Quote]

这种方案,还是会造成很多数据库访问啊。 如果是想减轻数据库访问,则建议把这些HTML码生成到文件,然后client的脚本直接去取下一个 xxxx.html 放入到某个广告的iframe中。
wwwwb 2009-04-13
  • 打赏
  • 举报
回复
楼主应该说明 一下队列表是什么结构,有什么字段,索引如何?怎么
取广告的ID,以便优化,楼上的方法不错,不知道是否有可行性
phoenix_pj 2009-04-13
  • 打赏
  • 举报
回复
思路与8楼上略有差别:
加个标示字段 flag,flag的初始值=你的第一条广告记录的id,每次去数据库取出,这个id的广告,和下一个广告的id,把下个广告的id存到flag中,如此循环,这样就不用再多建这个队列表了
wwwwb 2009-04-13
  • 打赏
  • 举报
回复
这样试试,增加一个字段,用做删除标志,显示完后,将此字段置为0,
查询时加入条件,删除标志<>0,定时运行删除 删除标志=0的记录。
ACMAIN_CHM 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 delphi_compiler 的回复:]
2. 这个网站是php+apache+mysql架构, 没有类似application这样的公用全局变量。我在考虑用一个xml文件替代数据库中的队列表,这样可以大幅减少对数据库读写。只是我不是很清楚在访问量很大情况下,读写文件的效率会比读写数据库高很多吗?哪位来说说?[/Quote]

不建议,访问XML文件,如果你是以文本格式访问,则效率并不高。如果以XML DOM来访问更慢。
WWWWA 2009-04-13
  • 打赏
  • 举报
回复
只是我不是很清楚在访问量很大情况下,读写文件的效率会比读写数据库高很多吗?
根据你的文件结构而定,数据库 有多人访问,而生成的文件访问的人数只有一个,从理论上讲,访问的人少,读写速度要快一些
加载更多回复(10)

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧