Introduction
Memlink用于持久化存储论坛中forum=>thread list,thread=>post list数据,下面对比了不同数据存储引擎存储上述逻辑关系的查询性能和内存开销。
Details
硬件
OS:CentOS release 4.6 (Final)
内存: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。用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
1. 一个客户端,长连接
memlink
操作 |
1w |
10w |
100w |
1000w |
insert
mem:4764K |
c:16296
py:12558
php:12153
mem:5032K |
c:14125
py:12565
php:12144
mem:6628K |
c:13868
py: 13096
php: 12521
mem:18M |
c:13187
py:12611
php:12124
mem:139M |
range first100 |
c:10874
py:8275
php:9185 |
c:11429
py:8273
php:9171 |
c:10994
py:8068
php:9136 |
c:11663
py:8256
php:10071 |
range first200 |
c:8045
py:6015
php:6544 |
c:8041
py:6017
php:6545 |
c:7863
py:5941
php:6542 |
c:7970
py:6024
php:7010 |
range first1000 |
c:1362
py:1446
php:1466 |
c:1362
py:1448
php:1468 |
c:1354
py:1440
php:1462 |
c:1362
py:1444
php:1492 |
range last100 |
c:11153
py:8137
php:8996 |
c:10318
py:7526
php:8263 |
c:5519
py:4410
php:4691 |
c:112
py:97
php:97 |
range last200 |
c:7938
py:5956
php:6461 |
c:7515
py:5629
php:6078 |
c:4615
py:3688
php:3899 |
c:111
py:96
php:97 |
range last1000 |
c:1358
py:1442
php:1458 |
c:1345
py:1421
php:1440 |
c:1209
py:1251
php:1272 |
c:103
py:91
php:91 |
redis
操作 |
1w |
10w |
100w |
1000w |
insert
mem:1060K |
15183
mem:1920K |
14997
mem:9044 |
14828
mem:78M |
14788
mem:771M |
range first100 |
1328 |
1329 |
1324 |
1332 |
range first200 |
708 |
709 |
705 |
709 |
range first1000 |
147 |
148 |
148 |
147 |
range last100 |
1221 |
212 |
19 |
2 |
range last200 |
675 |
184 |
19 |
2 |
range last1000 |
147 |
92 |
17 |
2 |
mysql
操作 |
1w |
10w |
100w |
1000w |
insert |
10891 |
10297 |
10022 |
9718 |
range first100 |
1550 |
1563 |
1559 |
1307 |
range first200 |
956 |
954 |
956 |
941 |
range first1000 |
230 |
230 |
230 |
235 |
range last100 |
31 |
3 |
0.3 |
0.04 |
range last200 |
31 |
3 |
0.3 |
0.04 |
range last1000 |
30 |
3 |
0.3 |
0.03 |
2. 一个客户端, 全部是短连接。一次请求一个连接。
memlink
操作 |
1w |
10w |
100w |
1000w |
insert
mem:4760K |
c:6560
py:6138
php:6064
mem:5108K |
c:6466
py:5990
php:5986
mem:6704K |
c:6675
py:6092
php:6010
mem:18M |
c:6719
py:6012
php:6003
mem:139M |
range first100 |
c:5467
py:4535
php:5064 |
c:5472
py:4450
php:4944 |
c:5662
py:4495
php:4712 |
c:5484
py:4475
php:4779 |
range first200 |
c:4533
py:3746
php:4124 |
c:4563
py:3693
php:4049 |
c:4709
py:3724
php:3893 |
c:4567
py:3708
php:3931 |
range first1000 |
c:1206
py:1254
php:1291 |
c:1200
py:1249
php:1285 |
c:1215
py:1253
php:1263 |
c:1202
py:1250
php:1266 |
range last100 |
c:5468
py:4451
php:4970 |
c:5229
py:4233
php:4692 |
c:3763
py:3055
php:3155 |
c:110
py:96
php:96 |
range last200 |
c:4558
py:3692
php:4053 |
c:4355
py:3545
php:3886 |
c:3323
py:2680
php:2790 |
c:110
py:95
php:96 |
range last1000 |
c:1198
py:1247
php:1284 |
c:1191
py:1226
php:1267 |
c:1096
py:1093
php:1125 |
c:102
py:91
php:91 |
redis
操作 |
1w |
10w |
100w |
1000w |
insert |
10891 |
10297 |
10233 |
10135 |
range first100 |
1058 |
1172 |
1166 |
1163 |
range first200 |
654 |
651 |
669 |
667 |
range first1000 |
146 |
145 |
145 |
144 |
range last100 |
994 |
271 |
32 |
3 |
range last200 |
630 |
233 |
32 |
3 |
range last1000 |
144 |
104 |
27 |
3 |
mysql
操作 |
1w |
10w |
100w |
1000w |
insert |
3313 |
3251 |
3108 |
3001 |
range first100 |
923 |
1158 |
1031 |
885 |
range first200 |
815 |
823 |
783 |
743 |
range first1000 |
227 |
230 |
226 |
212 |
range last100 |
20 |
3 |
0.21 |
0.02 |
range last200 |
30 |
3 |
0.3 |
0.04 |
range last1000 |
30 |
3 |
0.3 |
0.03 |
3. 10个客户端,并发长连接。
memlink内部开启4个处理线程。仅c客户端测试。
操作 |
1w |
10w |
100w |
1000w |
insert |
23021 |
22210 |
22200 |
22242 |
range first100 |
45451 |
53463 |
55645 |
48283 |
range first200 |
23768 |
33966 |
35045 |
35417 |
range first1000 |
4269 |
4305 |
4281 |
4271 |
range last100 |
53719 |
48948 |
24086 |
295 |
range last200 |
35593 |
34264 |
21830 |
292 |
range last1000 |
4285 |
4270 |
4336 |
277 |
redis
操作 |
1w |
10w |
100w |
1000w |
insert |
29401 |
30929 |
29109 |
30278 |
range first100 |
1443 |
1384 |
1396 |
1339 |
range first200 |
667 |
641 |
636 |
655 |
range first1000 |
114 |
115 |
114 |
115 |
range last100 |
1584 |
229 |
19 |
2 |
range last200 |
696 |
220 |
19 |
2 |
range last1000 |
114 |
142 |
19 |
2 |
mysql
操作 |
1w |
10w |
100w |
1000w |
insert |
13704 |
12786 |
12087 |
11023 |
range first100 |
2011 |
2059 |
2015 |
2387 |
range first200 |
1637 |
1768 |
1854 |
1614 |
range first1000 |
654 |
641 |
648 |
631 |
range last100 |
91 |
8 |
1 |
- |
range last200 |
96 |
9 |
1 |
- |
range last1000 |
91 |
8 |
1 |
- |
上面的 - 表示时间太长,数百秒也没有结果。
4. 10个客户端,并发短连接
Memlink内部开启4个处理线程。仅c客户端测试。
操作 |
1w |
10w |
100w |
1000w |
insert |
9665 |
9650 |
10078 |
10183 |
range first100 |
17400 |
17504 |
16614 |
17292 |
range first200 |
15786 |
15772 |
15964 |
16180 |
range first1000 |
3795 |
3918 |
3703 |
3250 |
range last100 |
16989 |
16502 |
13118 |
319 |
range last200 |
15915 |
15596 |
12203 |
316 |
range last1000 |
3893 |
3641 |
3332 |
299 |
redis
操作 |
1w |
10w |
100w |
1000w |
insert |
9381 |
9489 |
8993 |
8976 |
range first100 |
1695 |
1637 |
1696 |
1586 |
range first200 |
711 |
711 |
719 |
692 |
range first1000 |
118 |
115 |
116 |
114 |
range last100 |
2132 |
240 |
20 |
2 |
range last200 |
743 |
229 |
20 |
2 |
range last1000 |
120 |
174 |
19 |
2 |
mysql
操作 |
1w |
10w |
100w |
1000w |
insert |
5623 |
5621 |
5468 |
5306 |
range first100 |
2210 |
2286 |
1955 |
1611 |
range first200 |
1444 |
1791 |
1870 |
1402 |
range first1000 |
550 |
692 |
620 |
686 |
range last100 |
80 |
8 |
1 |
- |
range last200 |
94 |
9 |
1 |
- |
range last1000 |
94 |
9 |
1 |
- |
|
分享到:
相关推荐
### Memlink:高性能、持久化的Key=>List/Queue数据引擎 #### 一、Memlink概述 Memlink是一款由天涯社区研发并开源的数据引擎,旨在解决Web应用中对key-list/queue系统的需求。与传统的key-value系统相比,Memlink...
Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都 建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久...
Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久化...
为了确保数据的正确传输,我们还需要在FPGA中实现错误检测机制,如CRC(Cyclic Redundancy Check)或奇偶校验,以便在数据传输过程中检测并纠正错误。 在"rs232test"文件中,可能包含了测试程序或示例代码,用于...
在这个过程中,天涯社区开源了一系列项目,包括LVS管理系统、Varnish缓存推送平台以及高性能数据引擎memlink等。这些项目的开源极大地促进了业界的技术交流和发展,降低了整个行业的成本,同时也增强了团队成员的...