lnmp环境,其他页面内容都做了缓存了,没有多大的负载,就是这个浏览量统计功能,给mysql带来不小的压力,请问诸位有什么解决办法吗?
回复内容:
lnmp环境,其他页面内容都做了缓存了,没有多大的负载,就是这个浏览量统计功能,给mysql带来不小的压力,请问诸位有什么解决办法吗?
怎么都说不要用MySQL来做,每秒200并发对MySQL来说不算啥难事啊。而且换成Redis、Memcached,持久化姑且不说,业务代码和运维部署量都不小。
我给你几个建议,尽量让你的运维部署和业务代码改动小一些。
你可以做主从分离,不要在一个库上高并发插入同时还做大量统计运算。分离之后,查询在从库是做(甚至是导入Hive之类专门的分布式系统来做),主库上可以去掉索引,提升插入的性能。这个方法,业务代码几乎不用任何改动(改个数据库配置文件就好了)。MySQL运维部署也可以选个业务低谷在线做。
如果你可以接受少量业务代码(PHP)改动,还有两个建议:
1. 分库,分表,每个表的数据总量小了,操作起来性能会好一些,特别是对从库的MyISAM表。你插入之前可能会有一些查询,例如查询这个IP在不在库里,以前统计过没。
2. 使用HandlerSocket插件,绕过SQL Parser,直接操作存储文件。如果业务上有可能,还可以使用bulk insert(批量插入)。MySQL InnoDB还推出了类似HandlerSocket的InnoDB NoSQL Plugin,用的memcached协议,共享InnoDB Buffer,再也不用操心MySQL和Memcached之前怎么维护数据一致性了。
这种事情不要用MySQL做。弄个redis或者memcachedb就好了。
直接log在文件里不就可以了。。。何必一定mysql。。。
先存放在memcached里面 然后 比如到100次再写入数据库,每天来次统计,把没有满足100的数据一起统计到mysql里面
可以搞个队列慢慢插啊
定时数一下log,做个标记,然后再写进MySQL
方案一:直接写文件,每天跑一次脚本统计总数(并发太高的话,IO可能受不了)
方案二:把日志到写队列,由一个后端服务器从队列然后写到mysql,每天跑脚本统计总数
方案二:使用开源的日志收集服务程序
不要立刻写入mysql,可以先写入一个文本中,每增加一定数量如100次,写一次数据库
1. 不要用php来做,用nginx来做
2. php写入缓存系统,然后定时从缓存系统往数据库刷数据
3. 用 redis
感觉可以拿redis在前面给mysql挡一下先。
浏览量统计这类型的操作并不适合实时写数据库,即使当时撑住了,其架构的扩展性也不够好,建议还是做好归并,减少写DB的频率。
思路好像不对啊。
页面浏览量统计通常不这样做,因为页面浏览这种数据不是完全准确的,有些可能是搜索引擎访问的,所以不需要弄得这么精确。
可以参考下面这篇文章:(网站统计中的数据收集原理及实现)
http://developer.51cto.com/art/201210...
对实时性没要求的话可以直接分析 nginx 日志来做页面访问量统计。
最简单的方法是用blackhole引擎,这个的插入速度非常快~
具体的可以看:
http://dev.mysql.com/doc/refman/5.0/e...
用redis解决,以文章id作为key,每浏览一次值加1,每隔半个小时再写到mysql里面。
浏览量统计这类型的操作并不适合实时写数据库,即使当时撑住了,其架构的扩展性也不够好,建议还是做好归并,减少写DB的频率。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

在mysql中,可利用“ALTER TABLE 表名 DROP INDEX unique key名”语句来删除unique key;ALTER TABLE语句用于对数据进行添加、删除或修改操作,DROP INDEX语句用于表示删除约束操作。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Dreamweaver Mac版
视觉化网页开发工具