Coherence装载数据的研究 - Invocation Service
Posted ericnie的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coherence装载数据的研究 - Invocation Service相关的知识,希望对你有一定的参考价值。
这里验证第三个方法,原理是将需要装载的数据分载在所有的存储节点上,不同的地方是利用了存储节点提供的InvocationService进行装载,而不是PreloadRequest,
原理如图
前提条件是:
- 需要知道所有要装载的key值
- 需要根据存储节点的数目把key值进行分摊,这里是通过
- Map<Member, List<String>> divideWork(Set members)这个方法,输入Coherence的存储节点成员,输出一个map结构,以member为key,所有的entry key值为value.
- 装载数据的任务,主要是通过驱动MyLoadInvocable的run方法,把数据在各个节点中进行装载,MyLoadInvocable必须扩展AbstractInvocable并实现PortableObject,不知何解,我尝试实现Seriable方法,结果出错
- 在拆解所有key值的任务过程中,发现list<String>数组被后面的值覆盖,后来每次放入map的时候新建一个List才避免此现象发生.
- 不需要实现CacheLoader或者CacheStore方法
Person.java
package dataload; import java.io.Serializable; public class Person implements Serializable { public void setId(String Id) { public String getId() { public void setFirstname(String Firstname) { public String getFirstname() { public void setLastname(String Lastname) { public String getLastname() { public void setAddress(String Address) { public String getAddress() { |
MyLoadInvocable.java
装载数据的任务,主要是通过驱动这个任务的run方法,把数据在各个节点中进行装载
package dataload; import com.tangosol.io.pof.PofReader; import java.io.IOException; import java.sql.Connection; import java.util.Hashtable; import javax.naming.Context; import serp.bytecode.NameCache;
public MyLoadInvocable(List<String> memberKeys, String cache) { public Connection getConnection() { for(int i = 0; i < m_memberKeys.size(); i++) /**
|
LoadUsingEP.java
装载的客户端,负责数据分段,InvocationService查找以及驱动。
package dataload; import com.tangosol.net.CacheFactory; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.naming.Context; public class LoaderUsingEP { protected Set getStorageMembers(NamedCache cache) } Set members = getStorageMembers(cache); Map<Member, List<String>> mapWork = divideWork(members); InvocationService service = (InvocationService) |
需要配置的客户端schema
storage-override-client.xml
<?xml version="1.0"?> <internal-cache-scheme>
<listener/>
|
存储节点的Schema
<?xml version="1.0"?> <internal-cache-scheme>
<listener/>
|
输出结果
可见数据分片装载.
以上是关于Coherence装载数据的研究 - Invocation Service的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Coherence 12.2.1 中启用缓存服务器 JNDI 查找支持?