zoukankan      html  css  js  c++  java
  • 为什么 要弄清楚 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
    

      












  • 相关阅读:
    高数基础知识整理12.微分方程
    x(1-x)及其更高次在区间[0,1]上的积分值
    PHP中的http协议
    php简单实现MVC
    如何用jQuery获得select的值
    面向对象思想介绍
    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法
    js将时间转换为时间戳
    PHP中sql语句如何使用变量
    四种简单的sql语句(增删改查语句)
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10033792.html
Copyright © 2011-2022 走看看