• 其实导入数据确实是最麻烦的,我花了 4 个小时,方法是这样的,不知道大家有没有更好的方法:

    数据是公开的,压缩的是 11G,解压是 ~129G,每一行是一个 json,就 ip,domain,type 这几个字段。

    我是先 split -l 1000000 file,1 千万行一个文件,大约 130 个文件。

    然后批量转换成 mysql load 需要的 csv,(让 server 直接去 load 本地的文件应该是最快的,文档说比 insert 快 20 倍左右 https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html ,一开始尝试一行一行 insert,大约 20 行/s,实在太慢了,然后一次 insert 一万行,依然很慢)。

    先写好这个脚本:

    cat scripts/json2csv.py 
    import fileinput
    import json
    import ipaddress
    import csv
    import sys
    
    writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
    for line in fileinput.input():
        data = json.loads(line)
        ip = int(ipaddress.IPv4Address(data.get('name')))
        value = data.get('value')
        t = data.get('type')
        writer.writerow([ip, value, t])
    

    然后开 130 个进程一起跑,毕竟是 64C 机器

    for sf in $(ls source_file)
    do
            cat source_file/$sf | python3 scripts/json2csv.py > target_csv/$sf.csv &
    done
    

    最后在 mysql server 上执行 load data infile 语句,大约跑了 4 个小时。

    然后我以为建索引毕竟也是顺序写,估计也有 4 个小时。就去 twitter 求助了... 结果半个小时竟然神器地跑完了...