社区
MySQL
帖子详情
高负载下,Mysql表的读写性能问题
delphi_compiler
2009-04-11 10:41:45
客户要求在页面上实现广告内容的实时轮替,就是每刷新一次内容的不一样。我建了一个队列表来管理广告的显示顺序和次数。
每次页面刷新就从队列表读出当前的广告记录,然后将该记录删除。也就是说,每一次页面请求都会有一次数据查询读取和删除操作。现在网站还没开始推广,运行当然没问题。我担心以后如果访问量大了,我这种使用队列表的方案,性能会不会有问题?
请各位说说看法?多谢!
...全文
341
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)
MySQL
处理并发访问和
高
负载
的关键技术和策略
通过优化配置、使用索引和分区、分离
读写
操作、使用连接池和缓存以及持续的监控与调优,我们可以提升
MySQL
的
性能
和稳定性,为业务的发展提供有力的支撑。这样,可以大大减少数据库的
负载
,提
高
系统的响应速度。这样,当查询只需要访问其中的一部分数据时,
MySQL
就可以只扫描对应的小
表
,从而提
高
查询的效率。另一方面,
高
负载
则是指数据库需要处理大量的数据
读写
操作,这些操作可能包括复杂的查询、大量的数据插入、更新和删除等。同时,我们还需要关注数据库的版本更新和新技术的发展,及时将新的技术和策略应用到我们的系统中。
mysql
集群
读写
分离与主从同步原理
一个
高
可用、
高
负载
、
高
性能
的“三
高
”
MySQL
集群,至少需要12个
MySQL
节点。为什么需要这么多节点呢?下面我带着你从起点开始推导。
MySQL
如何处理并发访问和
高
负载
?
通过调整关键参数,如innodb_buffer_pool_size(增加InnoDB存储引擎的缓冲区大小以提
高
数据访问速度)、max_connections(允许更多的并发连接)、thread_cache_size和table_open_cache(优化线程和
表
缓存的使用),可以显著提升数据库在
高
并发和
高
负载
环境下的
性能
。索引是数据库
性能
优化的关键。通过将数据分片存储在不同的数据库实例或服务器上,每个实例或服务器只负责处理一部分数据,可以显著降低每个实例或服务器的
负载
,从而提
高
系统的处理能力和响应时间。
MySQL
8.0.18 VS
MySQL
5.7单
表
混合
读写
测试
环境: 两台一样的虚拟机,只跑
MySQL
一台虚拟机安装sysbench,跑测试 CPU 2核4线程 64位 内存 4G 数据库版本配置:
MySQL
5.7 默认配置 单
表
50万条 107.63M
MySQL
8.0.18 默认配置 单
表
50万条 107.63M Client虚拟机安装sysbench: Sysbench是一款开源的多线程
性能
测试工...
稳定运行的以
MySQL
数据库为数据源和目标的ETL
性能
变差时提
高
性能
方法和步骤
在ETL(Extract, Transform, Load)过程中,数据源和目标都为
MySQL
数据库时,
性能
变差可能由多种原因引起。提
高
以
MySQL
为数据源和目标的ETL
性能
需要综合考虑数据库
性能
、ETL任务的处理方式、硬件资源和工具的选择。通过批量处理、并行化任务、增量更新、查询优化以及硬件的优化等多种手段,可以有效提升ETL过程的整体
性能
。
MySQL
57,064
社区成员
56,762
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章