更快的对象json转换器

6jygbczu  于 2021-06-24  发布在  Storm
关注(0)|答案(2)|浏览(407)

我已经写了一个程序,批量插入到elasticsearch中,批量大约3000个。问题是,在执行批量插入请求之前,我需要将这些对象转换为json。但是json转换有一个主要的缺点,它正成为我整个计算的一个瓶颈。
有谁能推荐一种在java中将对象转换为json的超快速方法吗。我的代码如下所示:

private String getESValueAsString(ElasticSearchValue elasticSearchValue) throws JsonProcessingException {
    ElasticSearchValue prevValue = null;
    if (stateType == StateType.OPAQUE) {
      prevValue = (ElasticSearchValue) elasticSearchValue.getPrevious();
    }

    elasticSearchValue.setPrevious(null);

    ObjectMapper om = new ObjectMapper();
    Map<String, Object> props = om.convertValue(elasticSearchValue, Map.class);

    if (stateType == stateType.OPAQUE) {
      props.put("previous", prevValue);
    }

    return om.writeValueAsString(props);
  }
9vw9lbht

9vw9lbht1#

刚刚发现的问题是,我为每个序列化创建了太多的objectmapper,这使得我的整个处理过程很慢。这是一个非常好的指南,它提高了我的性能100倍
http://wiki.fasterxml.com/jacksonbestpracticesperformance

plupiseo

plupiseo2#

为什么不直接插入 BulkRequestBuilder 首先是json记录,类似这样的

Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
BulkRequestBuilder bulk = client.prepareBulk();
.....
bulk.add(client.prepareIndex(<your index>, <your type>)
    .setSource(<your object>.toJson());
....

而且在 <your object> class 创建 Gson 这样地:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

方法和步骤:

public String toJson(){
    return gson.toJson(this, <you class>.class);
}

相关问题