博客
关于我
大规模数据生成 (500万条数据)
阅读量:753 次
发布时间:2019-03-23

本文共 1902 字,大约阅读时间需要 6 分钟。

最近有一个作业需要对大规模数据进行性能测试。我需要处理500万条数据,这是一个很大的量,直接通过CSV文件导入数据库显然不可行。

直接使用循环_insert会显著影响性能,效率会非常慢。想到用存储过程来实现batch插入,希望能够提升效率。

以下是存储过程的实现代码:

CREATE OR REPLACE FUNCTION insert_users_test()RETURNS void AS$BODY$DECLARE   randomsid text;   randomna_id text;   p_source text := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';   p_sourceN text := '0123456789';   p_length int := 9;   w_result text := '';   w_index int := 0;   curtime timestamp;   enttime timestamp;BEGIN   FOR i IN 1..5000000 LOOP      BEGIN         -- 生成用户ID(数字组合)         w_result := '';         w_index := 0;         p_length := 9;         FOR i IN 1..p_length LOOP            w_index := floor(random() * length(p_sourceN))::integer + 1;            w_result := w_result || substring(p_sourceN, w_index, 1);         END LOOP;         randomsid := w_result;                  -- 生成用户名(字母数字组合)         p_length := 8;         w_result := '';         w_index := 0;         FOR i IN 1..p_length LOOP            w_index := floor(random() * length(p_source))::integer + 1;            w_result := w_result || substring(p_source, w_index, 1);         END LOOP;         randomna_id := w_result;                  curtime := 'now';         enttime := curtime + '-1 hours';                  INSERT INTO user(user_id, user_name, enttime, utdate_time)                        VALUES (randomsid, randomna_id, last_login_time, curtime);      EXCEPTION WHEN unique_violation THEN         NULL;      END;   END LOOP;END;$LANGUAGE 'plpgsql';

执行命令:select insert_users_test();

这个存储过程能够有效处理大规模数据插入任务。以下是一些关键点:

  • randomsid:通过随机选择数字生成用户ID,这确保了唯一性。
  • randomna_id:通过混合字母和数字生成用户名,同样保证了唯一性。
  • FOR循环:在循环中同时生成ID和用户名,以减少外部访问数据库的次数。

这个解决方案具有以下优点:

  • 性能提升:把单次插入改为批量处理,可以显著减少时间。
  • 避免独占资源:避免了长时间占用 recounted资源,防止性能被其他查询影响。
  • 异常处理:如果ID clashes发生,存储过程会重复尝试,直到插入成功。
  • 需要注意的是,对于每批数据XOTIFY操作以及监控执行时间进行优化是很重要的。

    这个方案在设计时尽量减少了直接访问数据库的次数,同时通过随机生成数据确保了唯一性。思考充分考虑了数据库性能和数据生成的需求,是一项可行且高效的方案。

    转载地址:http://nlwzk.baihongyu.com/

    你可能感兴趣的文章
    python读取含中文的json
    查看>>
    python | 提升代码迭代速度的Python重载方法
    查看>>
    python | 深入理解Python并发编程中的GIL限制与解决方案
    查看>>
    Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
    查看>>
    python | 高效使用Python工具自动生成模块文档的秘诀
    查看>>
    python 一个list去除另一个list中的值
    查看>>
    python 三大框架的 介绍。
    查看>>
    Python 下载的 11 种姿势,一种比一种高级!
    查看>>
    python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
    查看>>
    Python 中 3 个不可思议的返回功能
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>
    Python 中如何处理异常?
    查看>>
    Python 中如何实现列表的切片?
    查看>>
    Python 中如何实现字典的排序?
    查看>>