Hi:
At client, you can just use "LdapObjectPdx" object, which will be always in 
de-serialize form. Do you see any issue with it?
Thanks.Hitesh


      From: Evaristo José Camarero <[email protected]>
 To: Hitesh Khamesra <[email protected]>; "[email protected]" 
<[email protected]> 
 Sent: Thursday, June 15, 2017 3:47 AM
 Subject: Re: PDX SERIALIZATION WITH C++ GEODE-NATIVE
   

Hi there,

We are currentlyusing pre-modernization 
releasehttps://github.com/apache/geode-native/releases/tag/pre-modernization  
The function thatyou saw before consuming most of the CPU is built in our C++ 
app and basicallyis desirializaring a HashMap . As part of the Map value we 
store arrays, somaybe the structure is too heavy...  inlineCacheableHashMapPtr 
getAttributes(const PdxInstancePtr &instance) {   CacheablePtr attributes;   
instance->getField("attributes", attributes);    
returndynCast<CacheableHashMapPtr>(attributes);}  The classesimplementing the 
SErializable interface looks like  classLdapObjectPdx : public 
apache::geode::client::PdxSerializable {  private:   CacheableKeyPtr key;    
char*a;    boolb;   CacheableStringPtr c;     CacheableHashMapPtr attributes;   
 //children are kept only for distributed entries   CacheableLinkedHashSetPtr 
children;...      We tried to builda Java client making the queries our C++ app 
is doing and we see also that CPUusage is really high compared with Geode 
servers...  Running the YSCBwe see also that YSCB CPU usage is quite high 
compared with Geode. Maybe thisis the expected behavior as far as the lookups 
are basically primary keylookups  We are thinkingseveral options: use 
Dataserialization instead of PDX, try some specific forour data structure, try 
different structure with more primitives and avoidcollections...  Any hint is 
highlyappreciated  Thanks again,  /evaristo  



    El Miércoles 14 de junio de 2017 19:11, Hitesh Khamesra 
<[email protected]> escribió:
 

 >>>This method consumes most of the CPU:CacheablePtrattributes;    
 >>>instance->getField("attributes", attributes);

Do you know who is calling getField(..) api? Is application using PdxInstance?
Thanks.Hitesh.
      From: Evaristo José Camarero <[email protected]>
 To: "[email protected]" <[email protected]> 
 Sent: Wednesday, June 14, 2017 3:12 AM
 Subject: PDX SERIALIZATION WITH C++ GEODE-NATIVE
  
Hi there,  Weare using Apache Geode 1.1 as DB backend and a C++ application as 
client thatis using Geode-native pre-release (and using PDX serialization), and 
thesummary is that we are experience that PDX deserialization is taking most 
ofthe CPU in our C++ application.  Whenbenchmarking the application we see the 
following (in a 12 cores machine):-Geode CPU usage is really low (let's say 
40%)- Client app CPU usage is really (let's say 700%)  If we push further the 
benchmark thelatencies are simply too high  The objects that we store looks 
like:         CacheableKeyPtrkey;    char *a;    bool bdistributedEntry;   
CacheableStringPtr c;   CacheableHashMapPtr attributesMap;    // children 
arekept only for distributed entries   CacheableLinkedHashSetPtr d;



This method consumes most of the CPU:CacheablePtrattributes;    
instance->getField("attributes", attributes);



I have some doubts about:- Is C++ PDX serialization mature andperformant? I 
have read some benchmarks about Java's library but I was not ableto find 
information about the C++ library.- Is there any of modelling guidelinesthat 
could alleviate the serialization performance issue? We havestarted with a 
design in which classes are designed for simplicity withoutconsider PDX 
serialization performance aspect

Thx in advance,

Evaristo

   

   

   

Reply via email to