• 分库分表(sharding)后主键全局唯一性的解决方案


    随着数据量的增大,在数据库的扩展上通常遇到切分时保证键值的唯一性问题,遇到这种情况,通常有如下几种相对简单的解决方案:

    1  UUID 这种方案的优点是实现和管理简单,缺点是占用空间大,查询效率低下。

    2  Sequence Number 优点是实现和管理简单,确定是有性能瓶颈和单点问题。

    3  不同的集群采用的起始点或者增长间隔不同 这种方案实现简单,但是后期管理麻烦。

    除了上述解决方案之外其实还有很多简单可行的办法,但是通用性不太好,在各种解决方案的接触上,本人总结出一个实现和性能上都很好的解决方案,那就是采用时间戳加毫秒数再加随机数来解决,存储字段采用bigint。
    下面给出php代码实现:
    function ivan_fetch_unique_bigint_id()
    {
        $start_timestamp = 1238119411;
        $ivan_len = 3;
        $time = explode( ‘ ‘, microtime());
        $id = ($time[1] - $start_timestamp) . sprintf(‘%06u’, substr($time[0], 2, 6));
        if ($ivan_len > 0) {
            $id .= substr(sprintf(‘%010u’, mt_rand()), 0, $ivan_len);
        }
        return $id;
    }
    取模测试均分性很好。
    转载请注明出处,谢谢。
  • 相关阅读:
    尝试用phpmyadmin去getshell
    docker入门及环境搭建
    初始sql注入
    用BurpSuite爆破DVWA
    Sudo提权漏洞复现
    maccms后门分析
    webpack构建流程分析笔记
    《图解 HTTP》 阅读摘要
    offsetHeight、clientHeight、scrollHeight、offsetLeft 区别笔记
    js ==和===的区别
  • 原文地址:https://www.cnblogs.com/buffer/p/1715499.html
Copyright © 2020-2023  润新知