redis-哈希存储类似表记录,在项目中应用比较广,本文将最近测试的REDIS和STVM性能做以下测试报告。 各有应用场景(毕竟研发的出发点不同),非评论优劣好坏,测试案例也并不全面, 仅供大家参考。
由于STVM本身支持多进程,多线程,每张表都拥有独立锁,为了测试对比性,STVM网络服务启动1个线程,单张表,客户端采用多进程,多线程,全部采用单机部署。
测试配置:
机器配置如下:
在64位 Ubuntu上测试,机器配置如下:
4G RAM,CUP:Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz 4核
测试案例:
本地调用
由于redis不支持本地调用接口,因此在本地调用仅展示数据。
- STVM多线程本地写数据
线程数 | 进程数 | 200W记录5次平均耗时(单位秒) |
1 | 1 | 4.095 |
2 | 1 | 8.470 |
4 | 1 | 11.713 |
10 | 1 | 12.599 |
- STVM多进程本地写数据:
线程数 | 进程数 | 200W记录5次平均耗时(单位秒) |
1 | 2 | 9.275 |
1 | 4 | 15.376 |
1 | 5 | 15.423 |
1 | 10 | 15.838 |
结果分析:
线程效率明显高于进程,主要原因在于读写锁,数据缓存页的交换。当然也包括CPU的进程切换、任务切换、上下文切换。在线程、进程在4个时候处于最佳效率。
- STVM多线程本地读数据
线程数 | 进程数 | 200W记录5次平均耗时(单位秒) |
1 | 1 | 4.481 |
2 | 1 | 2.422 |
4 | 1 | 1.744 |
10 | 1 | 1.760 |
- STVM多进程本地读数据
线程数 | 进程数 | 200W记录5次平均耗时(单位秒) |
1 | 2 | 2.558 |
1 | 4 | 2.014 |
1 | 5 | 2.059 |
1 | 10 | 2.143 |
结果分析:
采用读写锁优势在与读,线程的优势明显高于进程,同理,在线程、进程在4个时候处于最佳效率。
- STVM多线程本地读写数据
线程数 | 进程数 | 200W写,200W读5次平均耗时(单位秒) |
1-R 1-W | 1 | 13.753 |
2-R 1-W | 1 | 8.700 |
1-R 2-W | 1 | 13.103 |
2-R 2-W | 1 | 12.744 |
- STVM多进程本地读写数据
线程数 | 进程数 | 200W写,200W读5次平均耗时(单位秒) |
2-R 1-W | 1 | 10.870 |
1-R 2-W | 1 | 14.632 |
2-R 2-W | 1 | 14.145 |
结果分析:
采用读写锁优势在与读,线程的优势明显高于进程。
网络调用
redis采用32个字段,考虑网络IO,STVM采用拥有60个成员变量的struck。
- REDIS多线程同步写数据
线程数 | 进程数 | 200W写5次平均耗时(单位秒) |
1 | 1 | 665.118 |
2 | 1 | 243.694 |
4 | 1 | 211.005 |
- STVM多线程同步写数据
线程数 | 进程数 | 200W写5次平均耗时(单位秒) |
1 | 1 | 62.666 |
2 | 1 | 28.219 |
4 | 1 | 18.573 |
结果分析:
网络IO相差不大,性能主要在于序列化、反序列化。
- REDIS多线程读数据
线程数 | 进程数 | 200W读5次平均耗时(单位秒) |
1 | 1 | 205.487 |
2 | 1 | 113.084 |
4 | 1 | 95.595 |
- STVM多线程读数据
线程数 | 进程数 | 200W写5次平均耗时(单位秒) |
1 | 1 | 63.847 |
2 | 1 | 28.820 |
4 | 1 | 20.033 |
结果分析:
网络IO相差不大,性能主要在于序列化、反序列化。
- REDIS多线程异步写数据
线程数 | 进程数 | 200W写5次平均耗时(单位秒) |
1 | 1 | 165.098 |
2 | 1 | 226.820 |
4 | 1 | 327.821 |
- STVM多线程异步写数据
线程数 | 进程数 | 200W写5次平均耗时(单位秒) |
1 | 1 | 6.806 |
2 | 1 | 6.806 |
4 | 1 | 6.788 |
结果分析:
采用读操作效率高于写,异步在多线程下不增反降,STVM在单线程服务上,性能效率可以趋近到本地调用。
这里并没有redis和stvm读写测试案例, 其实已经很明显根本不需要测试了,redis在异步写时候已经告诉你它他的处理性能(200W记录165s左右),但是STVM无论是在同步还是在异步时,都趋近本地调用。
篇幅有限,多线程多进程测试案例就没贴出来。
redis在分布式集群性能有待测试,毕竟STVM集群暂时还不完善。
下篇: