2015-04-23 3 views
0

Есть ли способ получить запись в виде байтов с карты Hazelcast? У нас есть промежуточная (Гц) очередь сообщений, где мы будем предлагать запись (значение) карты через локальный прослушиватель.Hazelcast IMap получить как двоичный

Чтобы уменьшить сериализацию (де) сериализации, мы передаем байт [] в очередь Hz. Однако для этого нам нужно вручную десериализовать объект ввода перед добавлением в очередь. Это тот же объект, который передается, и я думал о каком-то способе уменьшить эту «избыточную» десериализацию.

ответ

0

Вы можете сделать это, используя внутренние API, но это может измениться в будущем. Я могу привести вам пример, но я не уверен, что это то, что вы хотите использовать.

редактировать: Как уже упоминалось выше этого использует много внутренних API, поэтому, пожалуйста, знать о том, что может измениться в любой момент (даже без упоминания):

public class Test { 
    public static void main(String[] args) throws Exception { 
    HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); 

    IMap<String, String> map = hazelcastInstance.getMap("myMapName"); 

    String key = "mySearchedKey"; 
    map.put(key, "foo"); 

    SerializationService serializationService = getSerializationService(map); 
    Data keyData = serializationService.toData(key); 

    RecordStore recordStore = getRecordStore(map, key); 
    Record record = recordStore.getRecord(keyData); 

    // This will do no serialization in most cases since Data is a DataRecord 
    // only for InMemoryFormat::OBJECT this will serialize the object to a Data 
    // instance 
    Data serializedValue = serializationService.toData(record.getValue()); 
    } 

    /** 
    * This method handles internal APIs!!! 
    */ 
    private static SerializationService getSerializationService(IMap<String, String> map) { 
    MapProxyImpl<String, String> proxy = (MapProxyImpl<String, String>) map; 
    return proxy.getNodeEngine().getSerializationService(); 
    } 

    /** 
    * This method handles internal APIs!!! 
    */ 
    private static RecordStore getRecordStore(IMap<String, String> map, String key) throws Exception { 
    MapProxyImpl<String, String> proxy = (MapProxyImpl<String, String>) map; 
    HazelcastInstance hazelcastInstance = proxy.getNodeEngine().getHazelcastInstance(); 

    MapService mapService = proxy.getService(); 
    MapServiceContext mapServiceContext = mapService.getMapServiceContext(); 

    PartitionService partitionService = hazelcastInstance.getPartitionService(); 
    Partition partition = partitionService.getPartition(key); 

    PartitionContainer partitionContainer = mapServiceContext.getPartitionContainer(partition.getPartitionId()); 
    return partitionContainer.getRecordStore("myMapName"); 
    } 
} 
+0

Я бы очень хотел увидеть его. Ну, как намекнул ты, если это кажется пугающим, я просто вернусь к своей «избыточности» :). И спасибо за ваш ответ –

Смежные вопросы