Thanks Denis for confirming the benchmarks are real. I am using the latest ignite version i.e. 2.6.7.
I tried with Atomic as well, don't see much variation. Marginal changes. So currently, in my test, I am using <ignite>/examples/config/persistentstore/example-persistent-store.xml, with persistence disabled. And starting my 3 server nodes simply via <ignite>/bin/ignite.sh example-persistent-store.xml Client uses the same config xml. As for threads sharing the same key, no that is not a possibility. My daemon thread iterates over all keys in a loop and every key is handed over to a threadpool executor. So no 2 threads would get the same key. For now, i am keeping Cassandra aside. Since my first goal is to atleast see comparable performance numbers for "get", which is the primary reason to evaluate Ignite. After my initial tests, i had run perf test to check the network throughput between the 2 boxes, and it was around 1GB/s. So now as part of my next test, i am going to try moving my client to the same box as the server, getting network related issue out of play and see if it scales. Additionally try adding the applicable jvm properties you suggested. With this, the 2 primary reasons for performance dependencies are out, network and disk. Everything should be in memory and on the same box. I am not allocating any heap, and since this is primarily a 'get' as against 'query' test, we should be ok, i suppose. But let me know if heap allocation is needed. The benchmark test did not mention that. Lastly, here is the basic client code i am using, // ======== configuration Ignition.setClientMode(true); ignite = Ignition.start("/home/example-persistent-store.xml"); ignite.cluster().active(true); CacheConfiguration<String, BinaryObject> cacheConfig = new CacheConfiguration<>("empCache"); cacheConfig.setAtomicityMode(CacheAtomicityMode.ATOMIC); cacheConfig.setBackups(1); cacheConfig.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_ASYNC); cacheConfig.setIndexedTypes(String.class, BinaryObject.class); cacheConfig.setSqlSchema("PUBLIC"); cacheConfig.setStatisticsEnabled(true); QueryEntity queryEntity = new QueryEntity(); queryEntity.setValueType("employee"); queryEntity.setKeyType(String.class.getName()); LinkedHashMap<String, String> fields = new LinkedHashMap<>(); fields.put(Employee.FIELD_ID, String.class.getName()); fields.put(Employee.FIELD_NAME, String.class.getName()); fields.put(Employee.FIELD_DESIGNATION, String.class.getName()); fields.put(Employee.FIELD_EXPERIENCE, Integer.class.getName()); fields.put(Employee.FIELD_PHONE, Long.class.getName()); fields.put(Employee.FIELD_ISPERMANANT, Boolean.class.getName()); fields.put(Employee.FIELD_DEPARTMENTS, byte[].class.getName()); fields.put(Employee.FIELD_JOININGDATE, Timestamp.class.getName()); fields.put(Employee.FIELD_SALARY, Double.class.getName()); queryEntity.setFields(fields); queryEntity.setIndexes(Arrays.asList( new QueryIndex(Employee.FIELD_ID), new QueryIndex(Employee.FIELD_NAME), new QueryIndex(Employee.FIELD_DESIGNATION), new QueryIndex(Employee.FIELD_EXPERIENCE), new QueryIndex(Employee.FIELD_PHONE), new QueryIndex(Employee.FIELD_JOININGDATE), new QueryIndex(Employee.FIELD_SALARY) )); cacheConfig.setQueryEntities(Arrays.asList(queryEntity)); empCache = ignite.getOrCreateCache(cacheConfig).withKeepBinary(); //===================== // Get public Employee get(UUID id) throws Exception { BinaryObject empBinary = empCache.get(id.toString()); if (empBinary == null) System.out.println("Employee not found for Id[" + id.toString() + "]"); return retrieveEmployee(empBinary); } -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/