业务场景
7*24小时持续的数据写入和更新(行情类系统),需要存入成交记录,以及根据成交记录计算k线后更新k线
目前解决方案
使用Celery异步任务分发,获取到记录之后进程格式化然后通过mq分发到worker,对于各项目已经分库分表,worker采用gevent并发,使用INSERT xxxx ON DUPLICATE KEY UPDATE xxxx
来批量插入更新
遇到问题
在mq显示任务数流入超多100多每秒之后,出现lock wait timeout exceeded try restarting transaction
问题,此时增加消费者使得锁竞争更厉害,不增加消费者不能及时处理任务
目前预想
在mysql之前添加mongo,将数据在mongo进行k线的插入和更新,定期将历史数据插入mysql,清除mongo
不知道这样的方案是否做出了足够的优化,对于行情类系统持续的插入和更新应该采用什么数据存储来处理?