更快的对象json转换器

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

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

  1. private String getESValueAsString(ElasticSearchValue elasticSearchValue) throws JsonProcessingException {
  2. ElasticSearchValue prevValue = null;
  3. if (stateType == StateType.OPAQUE) {
  4. prevValue = (ElasticSearchValue) elasticSearchValue.getPrevious();
  5. }
  6. elasticSearchValue.setPrevious(null);
  7. ObjectMapper om = new ObjectMapper();
  8. Map<String, Object> props = om.convertValue(elasticSearchValue, Map.class);
  9. if (stateType == stateType.OPAQUE) {
  10. props.put("previous", prevValue);
  11. }
  12. return om.writeValueAsString(props);
  13. }
9vw9lbht

9vw9lbht1#

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

plupiseo

plupiseo2#

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

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

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

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

方法和步骤:

  1. public String toJson(){
  2. return gson.toJson(this, <you class>.class);
  3. }
展开查看全部

相关问题