作者回复: 你好,peter,感谢你的留言~由于问题比较多,我只能简略回答一下,后续我们的课程内容也会有相关的内容 Q1:MySQL innoDB的2000w性能下降的说法,不一定准确,这个数字和单条数据大小以及数据量有直接关系,我们的数据是行存储并且和聚簇索引在一起,并且查询索引是B+Tree,如果这个服务用途不是马上要求返回结果,也是能用的,只不过响应变得缓慢了,但是大部分我们对外服务对响应速度和并发是有要求的。缓慢原因是我们的MySQL的索引是整棵树完整结构,并且我们的实际数据都在最深处保存,如果树深度过深(比如超过3层),查询时和回表时相应的我们查询对比的次数和io会变多,这会直接导致了性能会有下降,能够承担的服务请求量也相应下降,我们用MySQL不推荐这么多的原因核心在于,我们还是想让接口请求能够快速回复查询请求 Q2:我想这个重点在于,业务怎么用这些数据,这决定了我们怎么分表,我们分表的目的主要是为了提高响应速度,我的建议是,如果是存储可以按取值范围拆分,这样可以简单做二分法查找确定数据服务在哪里,如果是用来对用户查询,那么在他的上层加上多层的缓存分片,类似LevelDB的层级,被查询的时候可以回源,当然这个是适合读多写少的场景,如果是其他场景,需要另外设计对应的方式,这些方式在后面都有介绍,敬请期待 你的问题很有趣,期待你的下次留言!
作者回复: 你好,移横为固,很高兴收到你的思考,你的回答和我当时想法很一致,我们做项目会碰到很多类似的情况,需要我们去预防超出预期的操作。 简单的说就是:我们怎么约束用的人,以及我们怎么用这个数据。
作者回复: 你好,业余草,感谢你的分享,当我们需要查询这个用户的邀请人时,还需要查询这个表,那么和我们对表的职能拆分有一定冲突,那么如何改进这个实现呢
作者回复: 你好,感谢你的支持!学习过程中有任何问题,欢迎提出,多多交流
作者回复: 你好,确实这么做更好
作者回复: 你好,拾掇拾掇,感谢你的留言,在使用中,如果我们想查询这个人的邀请人,这个表还是会被业务查询,那么如何设计改进呢?
作者回复: mongoDB是一个很有趣的数据库,很多设计开创了行业先河,但有几个老版本因为全局锁问题导致使用的时候,需要慎重,因为这个锁在并发高的时候加服务器也不能提升性能,后续的版本我没有太关注。 建议在选择的时候能够压测验证下现状来确认是否给不确定用户流量的系统使用,即使使用也建议对他加一层缓存。 至于历史记录是否选择mongodb,主要看我们的业务场景,如果是给大量用户使用不推荐,如果是我们存起来用来做数据分析,并且不会有大量流量的话可以使用。核心在于是否能够高可用,它的性能是否符合我们场景需要,是否满足我们的业务需要。
作者回复: 没毛病
作者回复: 你好,刘章,可以用MySQL proxy一类的中间件自动确认数据情况切换主从,如果是云服务,像阿里云的polardb可以在代理设置强一致。如果都没有可以业务上优先更新缓存,优先读缓存数据
作者回复: 你好,一步,很高兴收到你的心得,邀请关系放缓存是个好办法,建议表也拆一下,然后查找历史详情这样感觉会更方便一些~