实验一,测试Coherence(简称TC)加载对象的速度
1,设计一个大约2K的数据对象
分为两种形式,一种为普通实现Serializable接口,一种实现ExternalizableLite接口,存取数据用TC帮助类ExternalizeableHelper存取数据
2.客户端向TC中插入数据
分三种用例
A 插入1k量的对象
B 10K
C 100K
两种情况
一个对象一个对象插入
一批一批对象插入,每批对象为10K
3.TC节点为1,2,4,8
表一,一个TC节点
Time(ms) | insert one by one | inputAll on Serializable | inputAll on ExternalizableLite |
1k | 1672 | 735 | 406 |
10k | 7281 | 1735 | 1547 |
100k | 47765 | 14688 | 13610 |
表二,2个TC节点
Time(ms) | |||
3488 | 703 | 485 | |
24281 | 6703 | 6609 | |
215406 | 68843 | 66125 |
表三,4个TC节点
3781 | 641 | 453 | |
27187 | 6719 | 5828 | |
223680 | 5828 | 54875 |
表四,8个TC节点
4078 | 672 | 469 | |
32969 | 6609 | 6407 | |
248719 | 61672 | 58984 |
结果分析
1.数据加载速度与节点数目不是很有关系,显示优良的Scalability
2.inputAll比一个一个input有非常大的提高,但相对来说ExternalizeLite对性能提高不如前者明显(或者ExternalizableHelper用了某种压缩算法正好对我这样的数据优化不明显?)
3.在我目前的环境里加载的速度计算大约为
一个一个插入为0.8M/S
inputAll(10K)为2.98M/S
(附,这其中包含了产生数据的时间,测试中产生数据只是在JVM中new一个对象,考虑占用时间不多,同时去除比较困难)
实验二,内存占用实验
我的TC是配置用Distributed,使用缺省Local-Scheme
我的数据对象大约是2k,如果插入500K个则需要大约1G内存,Distributed缺省是一个backup,那么就需要2G内存
我每个JVM设置的heap size是512M,那么4个节点就是2G,考虑到TC本身的程序数据要求的占用内存那么可以计算出大概4个到5个节点可以接纳下500K个数据对象
在实际实验中4个节点在加载过程中产生OutOfMemory错误,节点失效
如果是5个节点可以顺利完成加载时间大约300秒(10K inputAll,使用ExternalizableLite)