问:怎么做到这个ID唯一呢?
答:可以使用雪花算法。
问:介绍一下雪花算法?
答:这个算法是分布式系统中生成唯一ID的算法,效率非常高,一般有64位二进制组成,第一位固定是0接下来的四十一位是时间戳,精确到毫秒,所以非常依赖机器的时间,然后10位是机器ID,支持1024个机器的编号;最后12位是序列号,支持每毫秒最多可以生成4096个不重复的序列号。最后是占用空间大小,8个bit位是1个byte,64位就是8个字节。就是一个长整形数字。
问:与自增生成的ID有什么区别?
答:1,存储空间大,查询效率较低。
2,适用于分布式系统,如果使用分库分表使用自增ID不能保证唯一性。
问:为什么查询效率比较低?
答:首先说mysql的索引结构,他是是一个B+树结构。要讲明白什么是B+树?
首先从最简单的二叉平衡树,说起,其父节点只有两个子节点,每次从硬盘取出一个,跟现有的ID比对,不同的话重新取,效率算不上高,当然比线型数组还是要搞的多。
于是就有了B数,B树有个名称叫做多路平衡查找树,听名字就比二叉树药快,B树的特点是一个节点存放不只一个元素,而且一个父节点有多个子节点,还有一些其他特性,那么它每次可以取多个数据加载到内存与现有的ID比较,命中的概率大大提升。
那为什么又有了B+树呢?B树有一个缺陷是每个节点有存放所有的数据,导致的问题就是每个节点存放的数据数量较少。而B+树在所有的叶子节点以外的节点里面只存放索引不存放数据,与之配合的是,其叶子结点包含所有的数据。于是再查询索引时,每次只讲所有索引加载到内存,所能查询的数量大大增加,命中的概率也大大增加。
所以我理解的就是查询效率跟每次查询的数据的数量成正比,占用空间大,每次查询的数量就少,效率就慢。
雪花算法面试题总结
最新推荐文章于 2025-04-23 18:14:37 发布