Coherence装载数据的研究-PreloadRequest
最近给客户准备培训,看到Coherence可以通过三种方式批量加载数据,分别是:
- Custom application
- InvocableMap - PreloadRequest
- Invocation Service
Custom application的方式简单易懂,基本就是通过put和putAll方法实现,就不再纠结了。但问题是无论是put还是putAll
都是一个串行过程,如果装载大量数据的话,就需要有一种并行机制实现并行装载。
本文对第二种方式InvocableMap做一些研究,PreloadRequest主要是基于一个entry的集合通过Cache Loader进行装载,
其命令主要是:
包含如下特征:
- 装载前必须知道要装载的所有的key值。
- 本身装载的动作通过CacheLoader来实现。
- 装载是并行过程,每个存储节点负责把分布在自己Cache的内容按照key值,从数据库中装载
代码:
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() { public Person() { public Person(String sId,String sFirstname,String sLastname,String sAddress) { |
实现CacheLoader的DBCacheStore.java,比较核心的是看load方法
package dataload; import com.tangosol.net.CacheFactory; import com.tangosol.util.InvocableMap; import java.sql.DriverManager; import java.util.Collection; import javax.naming.Context; import java.sql.ResultSet; import java.util.Collections; import javax.naming.NamingException; /** } // ---- accessors ------------------------------------------------------- /** /** Hashtable<String,String> ht = new Hashtable<String,String>(); m_con = ds.getConnection(); return m_con; // ----- CacheStore Interface -------------------------------------------- /** try stmt.setString(1, String.valueOf(oKey)); if (rslt.next()) } System.out.println("=============="+e.getMessage()); //throw ensureRuntimeException(e, "Load failed: key=" + oKey); /** if (load(oKey) != null) /** stmt.setString(1, String.valueOf(oKey)); /** /** /** /** try return list.iterator(); // ----- data members --------------------------------------------------- /** /** protected NamedCache cache; |
CoherencePreLoad.java程序
package dataload; import java.sql.ResultSet; import com.tangosol.util.InvocableMap; import java.sql.Connection; import java.util.Collection; import javax.naming.Context; public class CoherencePreLoad { public static void main(String[] args) { NamedCache cache = CacheFactory.getCache("SampleCache"); String sql = "select id from persons order by id"; try{ Context ctx = null; Hashtable<String,String> ht = new Hashtable<String,String>(); con = ds.getConnection(); while (rs.next()) { // this loads 1000 items at a time into the cache }catch (Exception e) { |
然后需要在缓存的配置中进行设置
<?xml version="1.0"?> <read-write-backing-map-scheme> <internal-cache-scheme> <cachestore-scheme> <listener/> </caching-schemes> |
需要注意的是,必须在启动Cache-server的时候加入weblogic.jar以及dataload的包,因为在DBCacheStore中用到了weblogic JNDI去寻找数据源。
输出结果如下:
在jdeveloper端的Coherence节点
在coherence server端的存储节点
通过visualVM监控是否已经写入缓存
Coherence装载数据的研究-PreloadRequest的更多相关文章
- Coherence装载数据的研究 - Invocation Service
这里验证第三个方法,原理是将需要装载的数据分载在所有的存储节点上,不同的地方是利用了存储节点提供的InvocationService进行装载,而不是PreloadRequest, 原理如图 前提条件是 ...
- 使用 Hive装载数据的几种方式
装载数据 1.以LOAD的方式装载数据 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION( ...
- db2 load命令装载数据时定位错误出现的位置
使用如下命令装载数据(注意CPU_PARALLELISM 1): db2 load from filename.del of del replace into tab_name CPU_PARALL ...
- 总结一下用caffe跑图片数据的研究流程
近期在用caffe玩一些数据集,这些数据集是从淘宝爬下来的图片.主要是想研究一下对女性衣服的分类. 以下是一些详细的操作流程,这里总结一下. 1 爬取数据.写爬虫从淘宝爬取自己须要的数据. 2 数据预 ...
- 对Yii 2.0模型rules的理解(load()无法正确装载数据)
在实际开发中,遇到数据表新增字段而忘记了在对应模型中rules规则中添加新增的字段,而导致load()方法装载不到新增字段,导致新增字段无法写入数据库中. 解决办法:在新增字段后及时在对应模型ru ...
- [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境
1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...
- android的liveview装载数据
设置布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andro ...
- (转载)IQ 16.0 SP02起支持从压缩文件直接装载数据到表中
参考文档: http://m.blog.chinaunix.net/uid-16765068-id-4405877.htmlhttp://www.cnblogs.com/lichmama/p/4103 ...
- [大数据学习研究]2.利用VirtualBox模拟Linux集群
1. 在主机Macbook上设置HOST 前文书已经把虚拟机的静态IP地址设置好,以后可以通过ip地址登录了.不过为了方便,还是设置一下,首先在Mac下修改hosts文件,这样在ssh时就不用输入ip ...
随机推荐
- SUSE LINUX 11忘记密码的解决方法
忘记ROOT的密码 1.重新启动机器,在出现grub引导界面后,在启动linux的选项里加上init=/bin/bash,通过给内核传递init=/bin/bash参数使得OS在运行login程序之前 ...
- shell脚本复制文件夹内容到另外的文件夹,如果存在则自动备份
有时我们需要将一个文件夹覆盖到我们的工作目录,但需要自动备份已经存在的文件,一个一个去备份太麻烦了,全部备份又没有必要.shell脚本可以很好滴完成这个任务.原文链接http://back.zhizh ...
- vnc无法显示桌面
转载 以下是我的正确配置,解决上述问题,附带说明: 修改后的~/.vnc/xstartup #!/bin/sh # Uncomment the following two lines for n ...
- Kuangbin 带你飞 KMP扩展KMP Manacher
首先是几份模版 KMP void kmp_pre(char x[],int m,int fail[]) { int i,j; j = fail[] = -; i = ; while (i < m ...
- UVALIVE 2954 Task Sequences
竞赛图:图中的任意两点间有且仅有一条有向弧连接 求竞赛图中的哈密顿路的算法: 首先,由数学归纳法可证竞赛图在n>=2时必存在哈密顿路: (1)n=2时显然: (2)假设n=k时,结论成立,哈密顿 ...
- 输入法出现 footer被挤上去的问题
/** * 修改点击input输入框时的位置 *input框获取焦点footer隐藏,失去焦点时显示 */ $('.input-footer-none').on('focus',function(){ ...
- SQL中使用UPDATE更新数据时一定要记得WHERE子句
我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 my ...
- SQL按多个字段排序时的实现规则
1.在使用SQL中的ORDER BY按照表中的多个列对表做排序是,会按照第一个列的排序条件作为排序基准,当第一个列的值都相同时,才会按照后面的列的排序条件作为排序基准: 案例如下: 图一和图二展示的是 ...
- python 模拟登陆园子
主要用到了python cookielib,urllib2,urllib这3个模块,python 不亏是具有 先天做 爬虫的特质,废话多说直接上代码 #coding: utf- import sys ...
- [jquery] ajax parsererror
http://stackoverflow.com/questions/5061310/jquery-returning-parsererror-for-ajax-request 方法一: 直接去掉 d ...