1>mysql数据库索引用的是B+树
2>分布式唯一ID算法--snowflake算法
1.UUID--长度32位的全局唯一识别码
uuid可以保证全局唯一,但是占用32位字节有些太长,并且由于是无序的,数据入库性能较差!
为什么说入库性能较差呢?
当我们插入主键自增的id时,会插入到索引分裂的最后一个节点上,饱和了之后会分裂出新的节点,这样节点的分裂次数最少,并且充分利用了节点的每个空间,不会造成节点的资源浪费。但是如果是无序的插入,会产生很多新的且未饱和的节点,从而大大的浪费了节点空间
2>数据库自增主键
虽然是有序的插入,但是由于主键的产生完全依赖数据库,会对性能造成影响。若一些删除或者修改的接口被截取,可能会被恶意非法遍历执行批量删除或者修改操作,对系统的安全性有一定的影响。
3>snowflake算法
优点:1.生成ID时不依赖于DB,完全在内存生成,高性能高可用。2.ID呈趋势递增,后续插入索引树的时候性能较好。
缺点:依赖于系统时钟的一致性。如果某台机器的系统时钟回拨,有可能造成ID冲突,或者ID乱序。