插入文档操作的一种优化,因为每次插入单条文档,都会向es中发送请求。然后es执行在返回结果;

如果有大批量的文档数据需要插入,这个时候单挑插入操作显然是不合理的;

之前学习的命令行批量执行方式:

POST /_bulk

{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title":    "My first blog post" }
{ "index":  { "_index": "website", "_type": "blog" }}
{ "title":    "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
{ "doc" : {"title" : "My updated blog post"} }复制代码
1:普通的批量插入方式
复制代码@Testpublic void BulkInsertDocument() throws IOException {BulkRequestBuilder bulkRequest = client.prepareBulk();// either use client#prepare, or use Requests# to directly build index/delete requestsbulkRequest.add(client.prepareIndex("weibo", "article", "1").setSource(jsonBuilder().startObject().field("user", "张三").field("postDate", new Date()).field("message", "近段时间关于马蓉的消息传得到处都是,而且我们也发现她这一段时间似乎小动作不断。对于她近期的所做所为,王宝强方面则显得冷静一些,要求法庭二审选择公开审理。").endObject()));bulkRequest.add(client.prepareIndex("weibo", "article", "2").setSource(jsonBuilder().startObject().field("user", "王二").field("postDate", new Date()).field("message", "新浪2016里约奥运站为您全程报道第31届里约夏季奥林匹克运动会,金牌榜,赛程赛果,赛事直播,高清图片,中国队比赛信息第一时间推送,与奥运人物微博互动").endObject()));BulkResponse bulkResponse = bulkRequest.get();if (bulkResponse.hasFailures()) {// process failures by iterating through each bulk response item}}
复制代码
这种方式也会有问题,比如在批量插入的时候,多大数据量插入一次,多少条插入一次,多少秒插入一次这样的定时定量的优化都是没有的,那么接下来让我们在看一下批量插入的优化操作2:优化后的批量执行方式
复制代码
@Testpublic void BulkInsertDocumen2t() throws Exception {BulkProcessor bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {//todo beforeBulk会在批量提交之前执行public void beforeBulk(long l, org.elasticsearch.action.bulk.BulkRequest bulkRequest) {System.out.println("---尝试操作" + bulkRequest.numberOfActions() + "条数据---");}//TODO 第一个afterBulk会在批量成功后执行,可以跟beforeBulk配合计算批量所需时间public void afterBulk(long l, org.elasticsearch.action.bulk.BulkRequest bulkRequest, BulkResponse bulkResponse) {System.out.println("---尝试操作" + bulkRequest.numberOfActions() + "条数据成功---");}//TODO 第二个afterBulk会在批量失败后执行public void afterBulk(long l, org.elasticsearch.action.bulk.BulkRequest bulkRequest, Throwable throwable) {System.out.println("---尝试操作" + bulkRequest.numberOfActions() + "条数据失败---");}})// 1w次请求执行一次bulk.setBulkActions(10000)// 1gb的数据刷新一次bulk.setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))// 固定5s必须刷新一次.setFlushInterval(TimeValue.timeValueSeconds(5))// 并发请求数量, 0不并发, 1并发允许执行.setConcurrentRequests(1)// 设置退避, 100ms后执行, 最大请求3次.setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)).build();// 添加请求数据Map<String, Object> m = new HashMap<String, Object>();m.put("document", "这是异步批量插入测试");bulkProcessor.add(new IndexRequest("testblog", "test", "1").source(m));bulkProcessor.add(new IndexRequest("testblog", "test", "2").source(m));
bulkProcessor.flush();
//        bulkProcessor.add(new DeleteRequest("testblog", "test", "2"));// 关闭bulkProcessor.awaitClose(10, TimeUnit.MINUTES);}

ES的插入优化之bulk相关推荐

  1. ES摄入性能优化(插入提高了2倍+ 17w/s到37w/s)

    es在没有优化之前,用spark-sql给es的新index中入数据qps顶峰为17w/s,在优化之后首次插入index中,顶峰的qps为40w/s es的集群规模为: 集群配置 主节点 m5.lar ...

  2. MSSQL数据批量插入优化详细

    序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据是如何插入的呢?我今天就此问题做个探 ...

  3. MyBatis批量插入(sqlserver BULK INSERT)

    MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: //        SqlSession sqlSessi ...

  4. oracle批量插入优化,oracle批量插入优化方案

    今天听DBA说如果从一个表批量查询出一批数据之后批量插入另外一张表的优化方案: 1)不写归档日志: 2)采用独占 关于insert /*+ append */我们需要注意以下三点: a.非归档模式下, ...

  5. es之java插入优化(批量插入)

    插入文档操作的一种优化,因为每次插入单条文档,都会向es中发送请求.然后es执行在返回结果: 如果有大批量的文档数据需要插入,这个时候单挑插入操作显然是不合理的: 之前学习的命令行批量执行方式: PO ...

  6. ES 批量插入数据 bulk

    引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elas ...

  7. bulk插入 es_ElasticSearch的Bulk操作 ES bulk详解

    elasticsearch bulkApi是什么?和普通的CURD区别在哪里? 1.可以批量对多个索引进行增加或者删除等操作,减少网络请求次数,可以显著的提高索引的速度. 2.CURD只能对单条数据进 ...

  8. mybatisPlus批量插入优化,性能快的飞起

    文章目录 1.背景 2.方案 2.1 多线程分页查询 . 生产者消费者模型.多线程sql注入器批量插入 2.2 游标查询sql注入器批量插入 2.3 多线程分页查询 . 生产者消费者模型.多线程往ES ...

  9. 被面试官问懵B了,十亿级数据ES搜索怎么优化?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊 ...

最新文章

  1. 全面!一文理解微服务高可用的常用手段
  2. 顺序容器----顺序容器概述,容器库概览
  3. 微型计算机所组装的流程图是,计算机、微型计算机的组成及工作过程.ppt
  4. jquery.dataTable.js 绘制表格使用详解
  5. XML Schema ---complexType-----复合元素
  6. 麦肯锡70页特辑报告论述《人工智能的未来之路》(完整版PPT)
  7. 【开发环境专题一】Maven环境搭建
  8. VMware vSphere 5.1 群集深入解析(二十八)- vSphere配置
  9. Deepin中如何使用adb和fastboot工具
  10. 统计学、统计学习和统计推断之间的关系
  11. tomcat修改http长度限制_解决浏览器与服务器请求url长度限制
  12. oracle 如何删除库,Oracle删除库
  13. 深入分析Zookeeper的Leader选举原理
  14. 安卓手机怎样安装apk应用
  15. 使用者多注意! 多件恶意软件潜入Google Play商店
  16. Android Room框架使用
  17. 非科班出身程序员该如何弥补技术差距?
  18. ES6-11数值扩展:二进制和八进制、数值分隔符、Number.isFinite()、Number.isNaN()等
  19. SQL Server 数据库中的临时表
  20. vue 使用正则判断邮箱格式是否正确 手机号 证件啥的都可以套用

热门文章

  1. 小米春招编程题(第3题)
  2. 手机欢乐斗地主怎么创建房间
  3. ubuntu下PPA相关的各类问题解决
  4. 超火的github项目you-get编写GUI界面并打包为exe文件
  5. 2023计算机毕业设计SSM最新选题之javaJava青年志愿者信息管理系统15925
  6. Outlook Express常见问答
  7. 程序员整体架构之开发架构
  8. 数学教程之终生学习者必读的22本精彩数学书
  9. 发现解决心脏病支架手术后心慌憋气的方法
  10. JEWELCAD珠宝手饰设计视频教程 JewelCAD Pro v2.2.2