| Fetures | Feature Description | GemFire7 | Coherence3.7 | Infinispan5 | Gigaspaces7 | Notes |
| 1. topologies | peer-peer; client-server | High | High | High | High | |
| 2. cross-site / WAN replication |
datacenter-datacenter; region-region | High | Low | Med | High | Coherence
support by incubator "Push replication"; Infinispan basic support in V5.2 |
| 3. read-most scalability | via replication | High | High | High | High | |
| 4. write-most scalability | via
partitioning and replication between primary and backups |
High | High | Med | High | |
| 5. high availability / HA | via
replication and persistence into disk (DB) |
High | High | High | High | |
| 6. asychronous replication |
useful
for slow changing data and WAN replication |
High | Med | High | High | Coherence
support by incubator "Push replication"; |
| 7. partition rehashing | consistent
hashing to reduce data relocation |
High | High | High | High | all
seem to use consistent hashing-like algorithms |
| 8. dynamic clustering | adds or loses nodes | High | High | High | Med | |
| 9. updating among partition backups |
master-backup:
less deadlock prone and IO master-master/update anywhere: more dealock prone and IO |
High | High | Low | High | Infinispan
only has master-master that incurs deadlock for slow network and large caches |
| 10. cache loader and writer |
2
application interfaces: loades data from DB and saves data into Cache. With cache loader and writer, applications only need to interace with Cache! |
High | High | Med | High | Infinispan writers only support JPA, not JDBC or Hibernate! |
| 11. read-through and read-ahead |
populates
cache with DB in batch mode |
Med | High | Med | High | no
prefetch/batch support from Gemfire and infinispan |
| 12. write-through and write-behind |
persists
cache into wherever they were loaded.write-behind persists data asynchronously |
High | High | Med | High | |
| 13. event notification | Cache
also works as a messaging and parallel processing bus like JMS/MDB |
Med | Med | Med | High | |
| 14. continous querying | register
contents-based interests with Cache and receive updates continously. |
High | High | Low | High | |
| 15. cache querying | SQL
like query: not only searches based on key matching |
High | High | Low | High | |
| 16. locking and tx | JTA (global tx) and ACID properties | High | High | Med | High | |
| 17. off-heap | puts
cache data off Java heap so that GC pause time is reduce! |
Low | High | Low | Low | |
| 18. key affinity / colocation |
colocates
related cache objects on the same partition to reduce IO |
High | High | High | High | |
| 19. customized partitioning |
puts
cache into specific cluster node to bypass cache hashing algorithm |
High | Low | Med | Low | |
| 20. synchronous requests like RFQ |
synchronou
requests should go through the same partition routing as asynchrous messages. |
Low | Low | Low | High | |
| 21. API | Map,Restful and appropriate interfaces | Med | Med | Med | High | |
| 22. language bindings | Java, C++ etc | Med | Med | Med | High | |
| 23. map-reduce / scatter-gather |
submits
aggregation tasks to run across multiple or all cluster nodes |
High | High | High | High | |
| 24. monitoring | monitor the health of clusters | High | Med | Med | High | |
| 25. J2EE (JMS,Web, Remoting) |
how much J2EE? to support? | Low | Low | Low | High | |
| 26. migration effort | how
to migrate to a different cache production in a J2EE app. server |
High | High | High | Low | GigaSpaces is an app. server |
Showing posts with label Gemfire. Show all posts
Showing posts with label Gemfire. Show all posts
Friday, June 27, 2014
Simple Comparisons on some In-Memory Data Grids
Thursday, May 29, 2014
Class Loading Issue when Running Gemfire 7.x OQL in Weblogic 10.3.x
I have a very simple OQL like "SELECT * FROM /FxLimitsRegion" that ran successfully in my unit/integration test. But I got the following exception when trying to run it inside my WebLogic EAR (our Gemfire cache and Weblogic application server run in the same JVM):
From the above stack trace, you can see it relates to the ANTLR jar. Both my EAR and Weblogic itself have ANTLR. But my EAR uses version 2.7.7 while Weblogic 10.3.2 uses a pretty old version.
So we need to know which ANTLR version was used. Here is the call workflow:
1. my EAR thread issued a OQL ->
2. Gemfire found ANTLR to parse the OQL to AST ->
3. ANTLR tried to load Gemfire class "com.gemstone.gemfire.cache.query.internal.parse.ASTSelect"
By default, Step2 found the Weblogic ANTLR by the Weblogic system class loader. But the Gemfire class is in the child EAR classloader. So Step 3 threw the exception.
If we can tell Weblogic to use my EAR ANTLR, the exception should be gone. In order to do so, I just added the following excerpt to your weblogic-application.xml:
<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>
New version of ANTLR changed to load classes from the thread context class loader by default which was the EAR classloader in my case. So if the Weblogic had new version of ANTLR, the exception should have not been there.
com.gemstone.gemfire.cache.query.QueryInvalidException: Syntax error in query: Invalid class or can't make instance, com.gemstone.gemfire.cache.query.internal.parse.ASTSelectThe class "com.gemstone.gemfire.cache.query.internal.parse.ASTSelect" to load was included in the gemfire.jar in my EAR. So the exception seems to be confusing in the beginning.
at com.gemstone.gemfire.cache.query.internal.QCompiler.compileQuery(QCompiler.java:80)
at com.gemstone.gemfire.cache.query.internal.DefaultQuery.(DefaultQuery.java:156)
at com.gemstone.gemfire.cache.query.internal.DefaultQueryService.newQuery(DefaultQueryService.java:107)
at com.gemstone.gemfire.internal.cache.LocalDataSet.query(LocalDataSet.java:129)
at com.jpmorgan.gcrm.sef.business.cache.impl.SEFCacheManagerGemfireImpl.queryPartitionedRegionLocally(SEFCacheManagerGemfireImpl.java:187)
at com.jpmorgan.gcrm.fno.business.datamanager.impl.FxDataManager.selectActiveFxLimits(FxDataManager.java:57)
... 13 more
Caused by: java.lang.IllegalArgumentException: Invalid class or can't make instance, com.gemstone.gemfire.cache.query.internal.parse.ASTSelect
at antlr.ASTFactory.createUsingCtor(ASTFactory.java:251)
at antlr.ASTFactory.create(ASTFactory.java:210)
at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.selectExpr(OQLParser.java:1090)
at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.query(OQLParser.java:217)
at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.queryProgram(OQLParser.java:115)
at com.gemstone.gemfire.cache.query.internal.QCompiler.compileQuery(QCompiler.java:76)
From the above stack trace, you can see it relates to the ANTLR jar. Both my EAR and Weblogic itself have ANTLR. But my EAR uses version 2.7.7 while Weblogic 10.3.2 uses a pretty old version.
So we need to know which ANTLR version was used. Here is the call workflow:
1. my EAR thread issued a OQL ->
2. Gemfire found ANTLR to parse the OQL to AST ->
3. ANTLR tried to load Gemfire class "com.gemstone.gemfire.cache.query.internal.parse.ASTSelect"
By default, Step2 found the Weblogic ANTLR by the Weblogic system class loader. But the Gemfire class is in the child EAR classloader. So Step 3 threw the exception.
If we can tell Weblogic to use my EAR ANTLR, the exception should be gone. In order to do so, I just added the following excerpt to your weblogic-application.xml:
<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>
New version of ANTLR changed to load classes from the thread context class loader by default which was the EAR classloader in my case. So if the Weblogic had new version of ANTLR, the exception should have not been there.
Subscribe to:
Posts (Atom)