• 为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法


    场景:

    有1.2亿条问答数据,相同问题的不同答案为不同条的数据,且该表数据逐日递增;

    第三方需求(不合理):

    将问题、答案数据分别放入问题表、答案表;

    问题表的主键为整数,在答案表中,每行数据有相应的问题表的主键值;

    为加快写入速度,不去问题表查找主键id,而在写库前,由脚本生成问题表的主键id,分别写入问题表、答案表;

    生成算法:

    11位时间戳+4位随机数

    注意:时间戳至少11位;(千年代码)

    mktime2date(1543400352) #2018-11-28 18:19:12
    mktime2date(2543400352)
    mktime2date(11543400352)

    2018-11-28 18:19:12
    2050-08-06 20:05:52
    2335-10-19 12:05:52

     取19位

    while True:
    s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]
    print(len(s), ':', s)
    sql = 'INSERT INTO testtab (id,v) VALUES ({},{});'.format(s, s)
    mysql_write(sql, mysql_key=mysql_key)

    bigint 2**32 /2 最多20位

    实际越限制,取19位

    CREATE TABLE `testtab` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `v` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9223372036854775807 DEFAULT CHARSET=utf8;

    id v
    1543481843334780969 1543481843334780969
    1543481843635608877 1543481843635608877
    1543481843922917607 1543481843922917607
    1543481844262030440 1543481844262030440
    1543481844454898236 1543481844454898236
    1543481844753212767 1543481844753212767
    1543481845071223819 1543481845071223819
    1543481845310268788 1543481845310268788
    1543481845574891236 1543481845574891236
    1543481845801856854 1543481845801856854
    1543481846122573779 1543481846122573779
    1543481846437020403 1543481846437020403
    1543481846688148132 1543481846688148132
    1543481846961211022 1543481846961211022
    1543481847216052080 1543481847216052080
    1543481847589641016 1543481847589641016
    1543481847709827395 1543481847709827395
    1543481848042075766 1543481848042075766
    1543481848361608572 1543481848361608572
    1543481848613226664 1543481848613226664
    1543481848829092584 1543481848829092584
    1543481849104387422 1543481849104387422

    def gen_mysql_pk_bigint():
    s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]
    if len(s) < 19:
    s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]
    return s


    C:Userssas.PyCharm2017.2systempython_stubs-1603771140\_random.py


    def random(self): # real signature unknown; restored from __doc__
    """ random() -> x in the interval [0, 1). """
    pass



    import time, random
    
    
    def gen_mysql_pk_bigint():
        # int(time.time())
        # 13=11+2
        s0=random.random()
        s1, s2 = str(time.time()).replace('.', '')[0:13], str(s0).replace('0.', '')[0:6]
        s = s1 + s2
        # 19-11=8
    
        if len(s) < 19:
            s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]
        if '.' in s:
            print('s0',s0)
            print('s',s)
            print(s1)
            print(s2)
        return s
    
    
    while True:
        gen_mysql_pk_bigint()
    
    
    
    
    
    
    
    
    
    
    s0 4.542730178391796e-05
    s 15435447395814.5427
    1543544739581
    4.5427
    s0 3.257238433707066e-05
    s 15435447395993.2572
    1543544739599
    3.2572
    s0 4.646998949264791e-05
    s 15435447396164.6469
    1543544739616
    4.6469
    s0 2.2152567914712762e-05
    s 15435447396202.2152
    1543544739620
    2.2152
    s0 1.5478322555884105e-05
    s 15435447396271.5478
    1543544739627
    1.5478
    

      












  • 相关阅读:
    CSS 盒子模型
    一个好的创业型团队需要下面几种人
    解决关闭Hadoop时no namenode to stop异常
    Hadoop RPC实例和通信过程分析
    实现RPC框架,几行代码就够了
    Linux 文件权限详解
    HDFS Java API 详解
    HDFS客户端的权限错误:Permission denied
    MongoDB GroupBy操作, 结果集大小限制问题。
    MongoDB 查询超时异常 SocketTimeoutException
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10033792.html
Copyright © 2020-2023  润新知