Introduction
Memlink用于存储Key=>List数据,下面对比了不同数据存储引擎存储存储Key=>List数据的性能和内存开销。压力测试分为:客户端有长连接和短链接、N个并发数执行M个查询、在不同数据规模下等多种组合测试。
Details
硬件
OS:CentOS release 4.6 (Final) 内核:2.6.9-67.0.22.ELsmp 32位 内存:4G CPU:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz (四核) 硬盘:250G SATA
数据模型
CREATE TABLE `ThreadList` ( `forumid` int ( 11 ) NOT NULL , `threadid` char ( 12 ) NOT NULL , `status` bit ( 1 ) DEFAULT 0 , `reply_time` datetime NOT NULL , KEY `threadlist` ( `forumid` , `reply_time` , `status` ) ) ENGINE = Innodb DEFAULT CHARSET = utf8 ;
memlink c:表示c客户端每秒操作成功条数,py:表示python客户端每秒操作成功条数,php:为php客户端每秒操作成功条数。mem:表示 memlink server消耗内存。 insert为插入操作,range为获取列表某个范围的操作。插入的列表中的数据每条为12字节。
redis redis测试一样每条数据是12字节。redis只测试c客户端。这里有两组测试,一组使用hiredis客户端,另一组使用redis自带的redis-benchmark。用LRANGE命令获取列表,用LPUSH向队列插入数据。redis是默认配置。
mysql mysql使用上面的数据库表结构。插入语句为:insert into ThreadList values (1, 'xxxx', 0, now()) 查询列表的语句为:select threadid from ThreadList where forumid=1 order by reply_time limit frompos,len
下面的测试结果中,红色为memlink ,绿色为redis ,蓝色为mysql 。
内存消耗测试
初始内存 1w 10w 100w 1000w memlink 4764K 5032K 6628K 18M 139M redis 1060K 1920K 9044K 78M 771M
访问性能测试
1. 一个客户端,长连接
1w 10w 100w 1000w insert memlink c:16296 py:12558 php:12153 c:14125 py:12565 php:12144 c:13868 py: 13096 php: 12521 c:13187 py:12611 php:12124 hiredis 15183 14997 14828 14788 redis 15673 15743 15594 15304 mysql 10891 10297 10022 9718 range first100 memlink c:10874 py:8275 php:9185 c:11429 py:8273 php:9171 c:10994 py:8068 php:9136 c:11663 py:8256 php:10071 hiredis 1328 1329 1324 1332 redis 4237 4587 4310 4347 mysql 1550 1563 1559 1307 range first200 memlink c:8045 py:6015 php:6544 c:8041 py:6017 php:6545 c:7863 py:5941 php:6542 c:7970 py:6024 php:7010 hiredis 708 709 705 709 redis 2631 2777 2666 2631 mysql 956 954 956 941 range first1000 memlink c:1362 py:1446 php:1466 c:1362 py:1448 php:1468 c:1354 py:1440 php:1462 c:1362 py:1444 php:1492 hiredis 147 148 148 147 redis 646 666 652 636 mysql 230 230 230 235 range last100 memlink c:11153 py:8137 php:8996 c:10318 py:7526 php:8263 c:5519 py:4410 php:4691 c:112 py:97 php:97 hiredis 1221 212 19 2 redis 3289 197 19 1.97 mysql 31 3 0.3 0.04 range last200 memlink c:7938 py:5956 php:6461 c:7515 py:5629 php:6078 c:4615 py:3688 php:3899 c:111 py:96 php:97 hiredis 675 184 19 2 redis 2237 188 19 1.97 mysql 31 3 0.3 0.04 range last1000 memlink c:1358 py:1442 php:1458 c:1345 py:1421 php:1440 c:1209 py:1251 php:1272 c:103 py:91 php:91 hiredis 147 92 17 2 redis 615 143 19 1.97 mysql 30 3 0.3 0.03
2. 一个客户端, 全部是短连接。一次请求一个连接。
1w 10w 100w 1000w insert memlink c:6560 py:6138 php:6064 c:6466 py:5990 php:5986 c:6675 py:6092 php:6010 c:6719 py:6012 php:6003 hiredis 10891 10297 10233 10135 redis 6134 5855 6072 5995 mysql 3313 3251 3108 3001 range first100 memlink c:5467 py:4535 php:5064 c:5472 py:4450 php:4944 c:5662 py:4495 php:4712 c:5484 py:4475 php:4779 hiredis 1058 1172 1166 1163 redis 3058 3058 3125 3333 mysql 923 1158 1031 885 range first200 memlink c:4533 py:3746 php:4124 c:4563 py:3693 php:4049 c:4709 py:3724 php:3893 c:4567 py:3708 php:3931 hiredis 654 651 669 667 redis 2150 2159 2222 2272 mysql 815 823 783 743 range first1000 memlink c:1206 py:1254 php:1291 c:1200 py:1249 php:1285 c:1215 py:1253 php:1263 c:1202 py:1250 php:1266 hiredis 146 145 145 144 redis 626 627 636 641 mysql 227 230 226 212 range last100 memlink c:5468 py:4451 php:4970 c:5229 py:4233 php:4692 c:3763 py:3055 php:3155 c:110 py:96 php:96 hiredis 994 271 32 3 redis 2531 189 19 1.97 mysql 20 3 0.21 0.02 range last200 memlink c:4558 py:3692 php:4053 c:4355 py:3545 php:3886 c:3323 py:2680 php:2790 c:110 py:95 php:96 hiredis 630 233 32 3 redis 1879 182 19 1.97 mysql 30 3 0.3 0.04 range last1000 memlink c:1198 py:1247 php:1284 c:1191 py:1226 php:1267 c:1096 py:1093 php:1125 c:102 py:91 php:91 hiredis 144 104 27 3 redis 602 141 19 1.96 mysql 30 3 0.3 0.03
3. 10个客户端,并发长连接。
memlink内部开启4个处理线程。仅c客户端测试。
1w 10w 100w 1000w insert memlink 23021 22210 22200 22242 hiredis 29401 30929 29109 30278 redis 32571 33692 33665 32945 mysql 13704 12786 12087 11023 range first100 memlink 45451 53463 55645 48283 hiredis 1443 1384 1396 1339 redis 7042 7142 7092 6666 mysql 2011 2059 2015 2387 range first200 memlink 23768 33966 35045 35417 hiredis 667 641 636 655 redis 3816 3816 3846 3571 mysql 1637 1768 1854 1614 range first1000 memlink 4269 4305 4281 4271 hiredis 114 115 114 115 redis 811 812 815 781 mysql 654 641 648 631 range last100 memlink 53719 48948 24086 295 hiredis 1584 229 19 2 redis 4694 197 19 1.82 mysql 91 8 1 - range last200 memlink 35593 34264 21830 292 hiredis 696 220 19 2 redis 3039 188 19 1.75 mysql 96 9 1 - range last1000 memlink 4285 4270 4336 277 hiredis 114 142 19 2 redis 772 149 18 1.75 mysql 91 8 1 -
上面的 - 表示时间太长,数百秒也没有结果。
4. 10个客户端,并发短连接
Memlink内部开启4个处理线程。仅c客户端测试。
操作 1w 10w 100w 1000w insert memlink 9665 9650 10078 10183 hiredis 9381 9489 8993 8976 redis 9285 9290 9287 8835 mysql 5623 5621 5468 5306 range first100 memlink 17400 17504 16614 17292 hiredis 1695 1637 1696 1586 redis 4629 4587 4504 4545 mysql 2210 2286 1955 1611 range first200 memlink 15786 15772 15964 16180 hiredis 711 711 719 692 redis 2941 2949 2941 2857 mysql 1444 1791 1870 1402 range first1000 memlink 3795 3918 3703 3250 hiredis 118 115 116 114 redis 761 739 761 735 mysql 550 692 620 686 range last100 memlink 16989 16502 13118 319 hiredis 2132 240 20 2 redis 4385 191 19 2 mysql 80 8 1 - range last200 memlink 15915 15596 12203 316 hiredis 743 229 20 2 redis 2941 182 19 2 mysql 94 9 1 - range last1000 memlink 3893 3641 3332 299 hiredis 120 174 19 2 redis 756 149 18 2 mysql 94 9 1 -
https://www.oschina.net/question/12_18406