在DataSerialization对象上应用索引后,CPU使用率很低

时间:2018-03-26 13:17:15

标签: java spring hazelcast

我有一个带有Spring的Java Web应用程序,我使用Hazelcast 3.6来缓存我从数据库服务器检索的大量数据。 我的许多课程都在HZ地图上进行了Hazelcast索引,以便更快地进行检索。

为了提高性能,我将序列化实现从Java的Serializable更改为DataSerializable,这更快。

作为概念验证,我更改了其中一个类并确认应用程序更快。 然后,我将所有被序列化的类/对象/模型更改为DataSerialization。 我们使用writeObject()来序列化everyObject的所有字段,因为某些字段可能包含null。

在经历了这个更大的变化后,我观察到(使用profilerin Eclipse)负责索引HazelCast映射的线程占用了我所有的CPU使用量并且进程从未结束。 例如 com.hazelcast.map.impl.operation.AddIndexOperation.run(AddIndexOperation.java:73)

我还观察了所有索引注释掉的应用程序,并且CPU使用率正常但应用程序速度较慢,因为没有索引映射的检索速度较慢

为什么索引与DataSerialization相比需要这么长时间而不是Serializable?

[更新] DataSerialization实施:

public class Address implements DataSerializable {
   private String street;
   private Integer zipCode;

   public Address() {}

   //getters setters..

   public void writeData( ObjectDataOutput out ) throws IOException {
      out.writeUTF(street);
      out.writeObject(zipCode);
   }

   public void readData( ObjectDataInput in ) throws IOException {
      street = in.readUTF();
      zipCode = (Integer)in.readObject();
   }
}

索引的实施:

@Override
public void addMapIndex(String mapName, String attribute, Boolean ordered) {
    final IMap<?, ?> map = this.getIMapObject(mapName);
    map.addIndex(attribute, ordered);
} 

0 个答案:

没有答案