获得徽章 1
#青训营笔记创作活动#
2月2日 打卡day2
今天学习了关于MySQL单表存储量问题的讨论,对于MySQL单表存储量,常见的说法是不超过2000万条数据。实际上这个问题可以被进一步解释为“InnoDB中高度为3的B+树最多可以存多少数据”。
根据是否为主键,索引可以分为聚簇和非聚簇,每个索引都是一棵树,树的非叶子结点存放索引数据。主键树的叶子节点为id,非主键树叶子结点存放id和该索引信息,用非主键查找时因为要先查id再查表,会有回表情况。
通常B+树高度为3,前两层为索引,最后一层为数据,而当数据量过大时,B+树将不得不变为4层,使得性能下降。
在InnoDB中,结点被称为页,每页大小为16KB,包括了一些格式信息和用户数据。当使用DYNAMIC创建表时,InnoDB会将可变长度列的值剥离出来存储到溢出页上,只在原位置保留一个20字节的指针指向溢出页。
最后根据计算,每一页留给用户的空间是15232字节,假设树前两层主键全部存满,则主键为bjgint时可以存放619369个叶子结点,为int时可以存放986049个叶子结点,即为理论上MySQL维持较高性能情况下的存储上限
展开
评论
#青训营笔记创作活动#
2月1日 打卡day1
今天学习了几种有效的限流算法,对于简单的计数限流和滑动窗口限流方法,都无法处理边界问题,即对于在时间边界左右双倍请求的问题。使用两种桶算法(一种取,一种放可以控制流量最大值,避免突跃情况发生。对于分布式限流情况,使用redis的原子化计数器可以控制集群的请求限制,redis作为公共资源维护了整体的流量计数。
展开
评论
@西安交通大学
个人成就
文章被点赞 3
文章被阅读 2,995
掘力值 212
收藏集
1
关注标签
3
加入于