0

Я написал программу, которая вставляет навалом в Elasticsearch в количестве около 3000. Проблема в том, что мне нужно преобразовать этот объект в json перед выполнением запроса объемной вставки. Но есть существенный недостаток с конверсией json, и он становится бутылочным горлом всех моих вычислений.Ускоренный объект json convertor

Может ли кто-нибудь предложить супер быстрый способ конвертировать объект в json в java. Мой код выглядит следующим образом:

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); 
    } 
+0

Где Бури часть в вашем вопросе? – Chiron

+0

@Chiron: Я нашел проблему. Это связано с тем, что каждый объект создавал новый ObjectMapper –

ответ

1

Только что нашел проблему, я создаю слишком много ObjectMapper для каждой сериализации, и это замедляет мою обработку. Это очень хороший гид и улучшил мою производительность 100x

http://wiki.fasterxml.com/JacksonBestPracticesPerformance

0

почему бы не просто вставить в 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); 
} 
Смежные вопросы