【问题标题】:Faster object json convertor更快的对象 json 转换器
【发布时间】:2014-01-12 19:26:53
【问题描述】:

我写了一个程序,批量插入到 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);
  }

【问题讨论】:

  • 您的问题中的风暴部分在哪里?
  • @Chiron:我发现了这个问题。这是由于每个对象都在创建新的 ObjectMapper

标签: java serialization elasticsearch apache-storm jsonserializer


【解决方案1】:

刚刚发现问题,我为每个序列化创建了太多的 ObjectMapper,这使我的整个处理速度变慢。 这是一个非常好的指南,它提高了我 100 倍的性能

http://wiki.fasterxml.com/JacksonBestPracticesPerformance

【讨论】:

    【解决方案2】:

    为什么不首先插入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());
    ....
    

    &lt;your object&gt; class

    像这样创建Gson

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

    和方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2017-06-16
      相关资源
      最近更新 更多