千家信息网

elasticsearch批量入库bulk性能实例测试

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"elasticsearch批量入库bulk性能实例测试",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"elasticsearch批量入库b
千家信息网最后更新 2026年11月01日elasticsearch批量入库bulk性能实例测试

本篇内容主要讲解"elasticsearch批量入库bulk性能实例测试",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"elasticsearch批量入库bulk性能实例测试"吧!

背景

我的需求很简单,就是用httpCilent组件,通过REST批量接口bulk提交一些数据。跑一下代码1W条数据导入完成耗时0.843秒,到这里我本可以高高兴兴的交差了,但是我又干了一件事情,用Java原生客户端跑了1W条数据,发现导入速度是0.359秒。管他呢,完成任务。但是,,但是我纠结了,作为一个有追求,有思想的码农,我纠结了。这个时间差距有点大啊。我就怀疑代码有问题了。我就又用了官方的JEST客户端试了下速度。发现速度也不快啊。然后,我的心理就一直缠绕着一个问题,批量导入哪家强?就做了一系列测试。本来测试个Http就好了,但是,又一个但是。我就根本停不下来了。

测试结果

单位是秒,数据量是1W条,总大小是672 kb。httpClient v1是用最笨的方法写的。V2s是加入了线程池,先初始化Client。速度取了3次的平均值。Java的客户端快的时候有0.2秒,也就是每秒5W多记录。测试10W条记录的时候发生了一点意外XContentBuilder太吃内存了,也就是JSON解析。我的2G内存的渣渣机器,跑不起来。换了服务器给3G内存测试的。测试数据很简单,下面这样。

{"create":{"_index":"nq_test2","_type":"base"}}\n{"name":"value1"}\n

第一组

  • 0.359 java

  • 0.843 httpClient v1

  • 0.593 httpClient v2

  • 0.719 jest

  • 0.581 javascript

  • 0.739 python

  • 0.389 nest (.net客户端)

第二组

10W 条 6825 kb

  • 5.343 python

  • 2.746 httpClient v2

  • 2.145 java

测试结论

http协议的REST接口,总是要比TCP协议的Java原生客户端要慢一些,意外发现是C#的Http组件,性能不错啊。

测试代码

python

def test():    actions=[]    for i in range(1,100001):        actions.append({"_index": 'nq_test2', "_type": "python","_source":{ "name":"value"+str(i)}})    starttime = time.clock()    helpers.bulk(es,actions,chunk_size=50000)    endtime = time.clock()    print "cost = "+str(endtime - starttime)

JS

var client = new elasticsearch.Client({  host: 'http://myes:9200',  sniffOnStart: false,  sniffInterval: 60000,});function buildData(){        var actions=[];        for(var i=1;i<=10000;i++){                actions.push({ index:  { _index: 'nq_test2', _type: 'js'} });                actions.push({ name: 'value'+i });        }        return actions;}function test(){        var actions = buildData();        var beginTime = new Date().getTime();        client.bulk({          body: actions        }, function (err, resp) {                var endTime = new Date().getTime();                //console.info(resp);                $("#costDiv").html('cost = '+(endTime-beginTime)/1000.0);                $("#tookDiv").html('took = '+resp.took);        });}

Java

public void test(int count) throws IOException{                BulkRequestBuilder bulkRequest = client.prepareBulk();                System.out.println("count ="+count);                for(int i=1;i<=count;i++){                        bulkRequest.add(client.prepareIndex("nq_test2", "java")                                .setSource(jsonBuilder()                                            .startObject()                                                .field("name", "value"+i)                                            .endObject()                                                )                        );                }                long beginTime = System.currentTimeMillis();                BulkResponse bulkResponse = bulkRequest.execute().actionGet();                if (bulkResponse.hasFailures()) {                        System.out.println("erros");                }                long endTime = System.currentTimeMillis();                System.out.println("took ="+bulkResponse.getTookInMillis());                System.out.println("cost = "+(endTime-beginTime)/1000f);}

Jest

public void test() {        Bulk.Builder builder = new Bulk.Builder()            .defaultIndex("nq_test2")            .defaultType("jest");            for(int i=1;i<=10000;i++){                    builder.addAction(new Index.Builder("{\"name\":\"value"+i+"\"}").build());            }            Bulk bulk =builder.build();                try {                        long beginTime = System.currentTimeMillis();                        JestResult result = client.execute(bulk);                        long endTime = System.currentTimeMillis();                        System.out.println("cost = "+(endTime-beginTime)/1000f);                        System.out.println("took = "+ result.getValue("took"));                } catch (Exception e) {                        e.printStackTrace();                }}

Nest (c#)

private void testBtn_Click(object sender, EventArgs e){    var settings = new ConnectionSettings(         new Uri(urlTxt.Text)    );    var Client = new ElasticClient(settings);    var Descriptor = new BulkDescriptor();    Descriptor.FixedPath("nq_test2", "dotnet");    var Count = Convert.ToInt32(numericUpDown1.Value);    foreach (var i in Enumerable.Range(0, Count))    {        Descriptor.Create(op => op.Document(new Item { name = "value"+i }));    }        var BeginTime = DateTime.Now.Millisecond;    var Result = Client.Bulk(Descriptor);    var EndTime = DateTime.Now.Millisecond;        label1.Text = "cost = "+((EndTime - BeginTime) / 1000f).ToString()+" sec";    label3.Text = "took = " + Result.Took.ToString() + " sec";}

到此,相信大家对"elasticsearch批量入库bulk性能实例测试"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

测试 客户 客户端 数据 性能 速度 实例 代码 内存 意外 也就是 内容 接口 方法 时候 组件 问题 学习 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 上海卓越科技互联网 科技互联网政务服务 互联网为科技 科技服务与互联网 嘟嘟瓜互联网科技 兼蜜互联网科技 丰台科技园 互联网公司 广西拼得多互联网科技有限公司 常德市电业局互联网科技部 互联网科技公司实习生 华夏互联网科技业 广州千川互联网科技有限公司 浙南科技城互联网大厦招聘 图游互联网科技 半导体行业属于互联网高科技类吗 杭州融税互联网科技有限公司 河南商务圈互联网科技有限公司 株洲百竞科技的互联网营销顾问 小牛互联网科技有限公司地址 小米移动互联网科技园 深圳互联网络科技有限公司 互联网科技公司电话 顺网科技2021年互联网排名 广州千川互联网科技有限公司 城市宝互联网科技有限公司 世界互联网科技成果奖 互联网领先科技活动 广州三三互联网科技有限公司 河南商务圈互联网科技有限公司
0