kettle如何3秒内写入100万条数据到Redis

1.实现结果

先来看下实现结果,如下图,本地写入100万数据,耗时2.3s,每秒44万。接下来说说如何实现:

数据存储结构样例:

2.添加redis包放到kettle的lib目录

jedis-3.1.0.jar

3.生成记录步骤

用于生成测试数据:

4.增加序列步骤

用于生成redis的key值

5.Json输出

用于将原始数据封装为一个json,存储到redis中:

json输出:字段页签,用于说明json中包含的字段信息:

6.Java 写入redis缓存

主要使用到了Pipeline类,实现批量提交:

详细代码如下:

// etl-java-redis
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;private Jedis jedis=null;
private JedisPool pool=null;
Pipeline pipe = null;
int cache_size=10000; // 批量提交大小
int cur_size=0; // 当前数据缓存量public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {if (first) {first = false;// connect to redis serverString redis_ip = getVariable("redis.ip", "127.0.0.1");String redis_port = getVariable("redis.port", "6379");String redis_password = getVariable("redis.password", "");cache_size = Integer.valueOf(getVariable("redis.cache_size", "10000"));logBasic(redis_ip+":"+redis_port);logBasic("redis_password:"+redis_password);// 连接池方式JedisPoolConfig config = new JedisPoolConfig();config.setMaxIdle(8);config.setMaxTotal(18);pool = new JedisPool(config, redis_ip, Integer.valueOf(redis_port), 2000, redis_password);jedis = pool.getResource();       jedis.select(1);// 切换数据库pipe = jedis.pipelined(); // 创建pipeline 对象logBasic("Server is running: " + jedis.ping());}Object[] r = getRow();if (r == null) {setOutputDone();pipe.sync();jedis.close();pool.close();return false;}// It is always safest to call createOutputRow() to ensure that your output row's Object[] is large// enough to handle any new fields you are creating in this step.r = createOutputRow(r, data.outputRowMeta.size());/*Redis数据存储(Redis-String)key : KEYvalue : JsonData*/String key = get(Fields.In, "id").getString(r);String value = get(Fields.In, "JsonData").getString(r);logDebug(key + "\t" + value);// 写入缓存pipe.set(key, value);cur_size++;if (cur_size % cache_size == 0 && cur_size > 0) {// 当达到缓存最大值时提交pipe.sync(); // 同步cur_size=0; // 复位}// Send the row on to the next step.putRow(data.outputRowMeta, r);return true;
}

7.命名参数

将可变参数存储到命名参数中,方便迁移:

– 本文结束 –

kettle如何3秒内写入100万条数据到Redis相关推荐

  1. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.S ...

  2. 导出100万条数据到excel

    导出100万条数据到excel 目的 数据库中有100万条数据,用java程序导入到excel,所花费的时间 演示 过程 eclipse 创建main sqlserver连接数据库程序 TCP/IP连 ...

  3. qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...

    SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...

  4. sql server批量插入数据库的操作100万条数据

    1.数据库中 首先创建表->连接数据库->通过循环插入数据 2.建立测试表 在这里插入代码[c-sharp] view plain copy --Create DataBase creat ...

  5. Oracle查询前100万条数据

    Oracle不支持select top语句,在Oracle中经常是用order by跟rownum select 列名1 ...列名n from ( select 列名1 ...列名n     fro ...

  6. 查询分析300万笔记录_给你100万条数据的一张表,你将如何查询优化?

    1.两种查询引擎查询速度(myIsam 引擎) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

  7. Mysql 给你100万条数据的一张表,你将如何分页查询优化?

    1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

  8. 给你100万条数据的一张表,你将如何查询优化?

    1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

  9. mysql100万数据一键下载csv_使用PHP来导入包含100万条数据的csv文件,请问你最快多久能全部导入mysql 数据库?...

    mysql> load data infile '/tmp/mytable.csv' into table mytable; load data infile肯定是最快的. 如果要用PHP来做, ...

最新文章

  1. bugku 杂项 就五层你能解开吗_9.65米解放龙V杂项危险废物厢式运输车62
  2. 【2016年第4期】欧盟数据可携权评析
  3. Beta版本测试报告以及Beta版本发布说明
  4. 莫比乌斯反演 BZOJ 2820
  5. JavaSE学习--正则表达式
  6. Java语言设计文本查找器和文本编辑器
  7. php 删除服务器指定目录图片
  8. RTL8187L usb驱动编译
  9. 聚类及DBSCAN 聚类算法
  10. excel柱状图自定x轴y轴_Excel制作双坐标轴图表与把X轴与Y轴改为月份及使坐标轴带方向...
  11. Pytorch模型训练(0) - CPN源码解析
  12. 使用pynput监听键盘组合键
  13. 题解 P3588 [POI2015]PUS
  14. Java项目:SSM图书馆图书管理借阅书籍管理系统
  15. 气象数据的常用格式以及处理的工具
  16. CentOS国内镜像源地址汇总持续更新
  17. PS竖排英文和数字文字怎么改变方向(变竖直显示)
  18. 那个爆火的“梦中修炼”AI,你也能用Keras搭一个了
  19. 通道滤镜,笔刷——破损字体制作方法
  20. word如何设置长宽高_word页面高度怎么设置

热门文章

  1. 读书笔记二:《破茧成蝶》
  2. 优秀的微课应该这样设计
  3. 成年人应该看的小故事
  4. python微信群管理开禁言_Python实现微信自动欢迎新人入群(Ⅰ )
  5. 首席新媒体黎想教程:如何构建策划活动,所需遵循的原则!
  6. CGB2202-DAY06-多线程,锁
  7. 无线自动水塔控制器产品设计
  8. 通达信神奇牛熊主图指标公式
  9. Ubuntu20.04设置永久ip
  10. TRIZ理论学习的思考