在股票业务中,需要处理大量的数据查询,由于api业务不能满足需要,对接口架构进行了升级,升级后解决过程遇到遇到mysql的性能问题
升级前:
升级前,API先查询cache, 没有 在查询 msyql, 然后缓存。
优点:自动适应数据更新,数据失效
缺点:有缓存穿透现象,访问量较大时,mysql性能会出现问题
升级后:
升级后,API直接查询cache,有没有都返回,cache由一个定时任务来更新生成
优点:API反应快速
缺点:mysql会在定时任务更新时压力较大,可控
升级后同步mysql:
升级后: mysql在定时任务时压力剧增,由于数据源时购买的,不能优化,因此需要同步到本地数据库。
本文说明的两个问题都是在这一步中产生的
记录下工作种解决的两个问题
- mysql两台服务器数据同步问题
有三种同步问题的方式:
1. mysql 主从,从服务器同步主服务器
优点:简单,自动,配置好后,不需要过多的人工干预
缺点:需要开启bin_log, 这个正是不选则主从的原因
2. 在原来的程序中同步
优点:程序基础设施都在,容易上手,开发较快
缺点:数据量较大,多表的情况下,拆分查询,写入复杂,110M的一个表,怎么拆分数据条数,同步时间控制等
3. mysql备份,导入的方式,定时执行这要用到 shell 查询mysql
优点: 逻辑简单,速度快,同时比较独立,单一任务
缺点:shell 比较生疏
综上,mysqldump备份导入的方式,对原有的数据库没有影响,同时兼顾效率,选择了第三种同步方式。同时遇到了下面的第二个问题。
- shell 写 mysql 查询的密码输入问题
在程序中直接输入密码会报错, 查询不到结果。goolge了一下学习到一个新的工具:mysql_config_editor
设置(自动保存密码等相关在remoteSync 中):
> mysql_config_editor set --login-path=remoteSync --host="127.0.0.1" --port=3306 --user=root --password
使用(获取remoteSync配置的密码等):
> mysql --login-path=remoteSync
另外,应该还有一种expect的方式,可以自动输入用户名和密码的,本人没有验证。