社区
MySQL
帖子详情
高负载下,Mysql表的读写性能问题
delphi_compiler
2009-04-11 10:41:45
客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。
每次页面刷新就从队列表读出当前的广告记录,然后将该记录删除。也就是说,每一次页面请求都会有一次数据查询读取和删除操作。现在网站还没开始推广,运行当然没问题。我担心以后如果访问量大了,我这种使用队列表的方案,性能会不会有问题?
请各位说说看法?多谢!
...全文
303
31
打赏
收藏
高负载下,Mysql表的读写性能问题
客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。 每次页面刷新就从队列表读出当前的广告记录,然后将该记录删除。也就是说,每一次页面请求都会有一次数据查询读取和删除操作。现在网站还没开始推广,运行当然没问题。我担心以后如果访问量大了,我这种使用队列表的方案,性能会不会有问题? 请各位说说看法?多谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
基于数据库中间件Mycat的
MySQL
主从与
读写
分离配置详解与示例
-
性能
调优:根据业务
负载
调整Mycat的相关配置,如连接池大小、超时时间等,以保证服务的
高
可用性。 - 监控与日志:实时监控Mycat的运行状态,记录日志以便于故障排查。 通过以上分析,我们可以看到,利用Mycat实现...
一文搞懂
MySQL
高
读写
负载
的系统级优化方案
随着业务规模扩大,
MySQL
单库单
表
在
高
并发
读写
场景下面临严重
性能
瓶颈,
表
现为查询缓慢、写入拥堵甚至服务不可用。本文系统梳理了应对
高
读
负载
的策略,包括
读写
分离、数据库分区、Elasticsearch 引入、缓存优化和...
使用
MySQL
Router 实现
高
可用、
负载
均衡、
读写
分离
MySQL
Router 简介、安装配置、自动失败切换、
负载
均衡、
读写
分离、多实例
MySQL
高
性能
读写
分离实战
我的上一篇文章实现了
mysql
的主从复制结构,今天这篇继续将如何实现
读写
分离。
读写
分离是指:针对数据库的写操作(插入、更新、删除等)访问主数据库,读操作访问从数据库。因为一般网站的读请求的数量是远远大于写...
Mysql
读写
分离以及
负载
均衡
本文演示了通过mybatis-plus拦截器插件实现
mysql
主从的
读写
分离以及通过nginx代理实现
mysql
从机集群的
负载
均衡
MySQL
57,064
社区成员
56,759
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章