#chiroito ’s blog

Java を中心とした趣味の技術について

PofSerializerとSerializerの比較

POF(Portable Object Format)を利用したシリアライザーとJavaのシリアライザーであるPofSerializerとSerializerではどれくらいのパフォーマンスの差があるのかを検証してみました。

注:個人的な検証の結果です。

検証環境

Intel Core i7 S860(2.53GHz)
DDR3 4GB
Windows7 Ultimate
Java 6.0 update 18
Oracle Coherence 3.6.1

検証パターン

指定した数のデータをキャッシュへ連続でput/getする。
データの個数:100個、1,000個、10,000個、100,000個、1,000,000個
それぞれの個数で3回実行しその平均値を用いました。

結果

SerializerよりもPofSerializerの方が高速という結果になりました。
また、Serializerではgetとputの実行時間に差はほとんど見られませんが、PofSerializerではgetの方が常に高速です。
そのためPofSerializerとSerializerの実行時間比ではgetの方が高い効果が見られます。
なぜか10,000個のケースが一番差が開きませんでした。
このグラフからは読み取れませんが、3回実行しても実行時間はほとんど変わりませんでした。

実行時間
PofSerializerとSerializerの実行時間比

ソース

PofSerializerとEntityはこちら参照
PofSerializerを使ってみた

package com.chirokings;

import java.math.BigDecimal;
import com.chirokings.entity.Employee;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;

public class TestSerializer2 {
private static int SIZE = 100;
public static void main(String[] args) {
NamedCache cache = CacheFactory.getCache(Employee.class.getName());
System.out.println(System.currentTimeMillis());
Employee emp1 = null;
for( int i=0 ; i < SIZE ; i++ ){
emp1 = new Employee();
emp1.companyId = "OR";
emp1.employeId = new BigDecimal(1);
emp1.age = new BigDecimal(27);
emp1.name = "abc";
cache.put(new Integer(i), emp1);
}
System.out.println(System.currentTimeMillis());
Employee emp2 = null;
for( int i=0 ; i < SIZE ; i++ ){
emp2 = (Employee)cache.get(new Integer(i));
}
System.out.println(System.currentTimeMillis());
}
}
PofSerializer利用のVM引数
-Dtangosol.coherence.cacheconfig=serializerCache1.xml -Xms2048M -Xmx2048M -Dtangosol.coherence.localhost=127.0.0.1 -Dtangosol.coherence.ttl=0 -Dtangosol.pof.enabled=true -Dtangosol.pof.config=my-pof-config.xml
Serializer利用のVM引数
-Dtangosol.coherence.cacheconfig=serializerCache1.xml -Xms2048M -Xmx2048M -Dtangosol.coherence.localhost=127.0.0.1 -Dtangosol.coherence.ttl=0