蔚来汽车 TiDB丨单表超 20 亿从 MySQL 到 TiDB 迁移思考与实践
主键索引和非主键索引都是B+树结构,其中非主键索引的叶子节点存储主键值,用于快速定位到具体的数据行。B+树的每个节点可以存储更多的键值,这意味着相比B树,B+树的高度更低,查询效率更高。事务和MVCC:InnoDB通过行级锁定和MVCC机制来支持高并发的读写操作。通过Undo日志来实现MVCC,允许在不锁定...
淘宝的数据库,主键是如何设计的?
对于核心业务表,主键设计至少应该是全局唯一且是单调递增。全局唯一保证在各系统之间都是唯一的,单调递增是希望插入时不影响数据库性能。这里姜老师推荐最简单的一种主键设计:UUID。我知道很多同学会说:UUID啊,虽然全局唯一,但是占用36字节,数据无序,插入性能差。是的,再一次的以上全错。在得到上述结论前,是不...
如何设计一个分布式 ID 发号器?
对于并发量低的情况下,我们可以直接部署1台机器,每次获取ID的时候就往数据库表插入一条数据,随后返回主键ID。这种方式的好处是非常简单,实现成本低。此外,生成的唯一ID也是单调自增的,可以满足数据库写入性能的要求。但其缺点也非常明显,即其强依赖数据库。当数据库异常的时候,会造成整个系统不可用。...
无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC...
如果按照以上3NF的要求设计的表,就会无法录入信息到表,因为主键是不能为空的。所以,我们需要重新设计这个数据表,把它变成符合BCNF的表。即从主键中再次进行分解成其他的表。重新设计后,我们表如下:这样设计就符合BCNF第四范式:(消除一个表内的多个多值)我们也叫做4NF。这个范式的设计我们需要先满足BC要求的前...
一文读懂数据库优化之分库分表
在数据库表设计时,经常会使用自增ID作为数据主键,这就导致后续在迁库迁表、或者分库分表操作时,会因为主键的变化或者主键不唯一产生冲突,要解决主键不唯一问题,有如下方案:方案一:自增ID做主键时,设置自增步长,采用等差数列递增,避免各个库表的主键冲突。但是这个方案仍然无法解决迁库迁表、以及分库分表扩...