追記
キャッシュにputするデータが小さいという指摘をいただいた。 確かに数バイトでは少なかったかも…と思い、 tDiary キャッシュサイズを参考にして、 8KB のデータを put するようにした。
データサイズ8KBでのベンチマーク結果
データ数 = 10
method | user | system | total |
PStoreAdapter#put | 9.72 | 1.20 | 10.92 |
PStoreAdapter#get | 2.65 | 1.27 | 4.02 |
PStoreAdapter2#put | 1.92 | 0.39 | 2.31 |
PStoreAdapter2#get | 0.52 | 0.18 | 0.70 |
MemCacheAdapter#put | 2.05 | 0.29 | 2.34 |
MemCacheAdapter#gut | 1.24 | 0.25 | 1.49 |
データ数 = 100
method | user | system | total |
PStoreAdapter#put | 113.3 | 106.2 | 219.5 |
PStoreAdapter#get | 20.8 | 10.2 | 31.0 |
PStoreAdapter2#put | 1.91 | 0.53 | 2.44 |
PStoreAdapter2#get | 0.51 | 0.19 | 0.70 |
MemCacheAdapter#put | 2.04 | 0.44 | 2.48 |
MemCacheAdapter#gut | 1.21 | 0.33 | 1.54 |
データ数 = 1000
method | user | system | total |
PStoreAdapter#put | - | - | - |
PStoreAdapter#get | - | - | - |
PStoreAdapter2#put | 1.99 | 0.93 | 2.92 |
PStoreAdapter2#get | 0.56 | 0.22 | 0.78 |
MemCacheAdapter#put | 2.07 | 0.29 | 2.36 |
MemCacheAdapter#gut | 1.14 | 0.24 | 1.38 |
考察
1つのファイルに全キャッシュを格納する PStoreAdapter は、明らかに落ち込みが激しい。 データサイズを8KBにすると処理時間が10倍になった。 さらにデータ数に応じて計算量がO(n)で増加するので、大量のデータを1つの PStore ファイルのは望ましくない。
PStoreAdapter2 と MemCacheAdapter はデータサイズの増大で処理時間は2〜3倍に増加しているけど、データ数に関わらずに計算量は O(1) 。 ツッコミで指摘をいただいているけど、 tDiary くらいの規模のアプリケーションであれば、ファイル数の増加とメモリの消費のどちらを選ぶかで選択してもいいかも。