注: 这里会公布所有的测试脚本, 测试脚本有不足指出还请指教学习, 如果有朋友有跑出来新的数据, 烦请发一份给我, 谢谢.
, 输出为对比折线图以及各种存储产品的平均每条耗时 .
注 1: 内存比较图顶端标题有平均每条操作时间
注 2: 多种存储产品比较图各自的标题后有平均每条操作时间
种产品平均每条数据写入时间为 :
从上面的写入性能来看 , Memcache 最快 , 其次 TCH, 这两个基本在同一数量级 , 而其余三者性能相差比较大 .
种产品平均每条数据写入时间为 :
根据上面写入和读取的性能测试来看 , Memcache, TCH 在游戏数据的存储方面备选 , 由于在查阅资料的过程中 , 发现有观点认为 TCH 在数据量超出内存后会导致性能下降 , 而 TCB 则性能稳定 , 不受此影响 , 通过下面内存峰值是 TCB 和 TCH 的读取写入性能测试来比较二者 .
从上图对照可以得到结论 : TCH 数据库在数据量超出内存后写入性能会有明显的波动 ( 约 0.6 倍 ).
对比上面两图顶端标题中的平均耗时 : 内存满负荷 261.4e-6 秒 , 内存空闲 30.05e-6 秒 , 性能差 8 倍左右 , 因此 , 可以得到结论 : TCH 在内存满负荷后性能会下降 8 倍左右 .
TCH 在内存满负荷情况下 , 产生如下性能损耗 : 写入降低为原来的 60% 左右 , 读取性能降低为原来的
从上图可以看出 TCB 的性能比较稳定 , 写入性能与内存消耗几乎无关 .
8 倍左右 , 因此 , 可以得到结论 : TCB 在内存满负荷后性能会下降 8 倍左右 .
TCB 在内存满负荷情况下 , 产生如下性能损耗 : 写入降低为原来的 60% 左右 , 读取性能降低为原来的
TCB, TCH 的内存峰值性能测试数据
由此表格可以看出 , TCB 在内存满时读取上的平均优势为 60e-6 秒左右 , 而 TCB 的写入性能约为 TCH 的 50%, 由上面图表分析可以证实网上查阅得到的 TCH 在数据量超过内存容量后性能下降 , 但是 , TCB 的读取也会有所下降 , 究其整体运行的性能来看 , TCH 优于 TCB.
, 从另一个角度来看 , Memcache 作为一个纯粹的缓存产品 , 不能够独立的处理数据存储业务 , 因此 , 如果使用 Memcache 作为 key-value 的存储接口 , 那么为了数据的持久化及其安全性 , 必然要使用某种持久化存储工具去实现 .
如果 Memcache 再套一个持久化存储工具 , 那么这中间必然会带来一定的性能损失 , 从另一方面来讲 , Memcache 外加持久化工具 , 必然要增加编程实现上的难度 , 也就是间接的增大项目风险
从安全性方面来讲 , TT 系列的数据库都提供了备份和还原接口 , 能够支持完整备份和增量备份 , 也能够支持指定时间的恢复 , 而 Memcache 在这一方面也要比 TT 弱 .
测试数据量在第一部分讨论过 , 以单表 1.6 亿为准 , 但是 , 由于 Mysql 用来写入测试数据的程序在
而 TCT 的包含查询仍然能够使用文本索引
图中蓝色为 Mysql, 黑色为 TCT, 此时 , 根据性别检索的条件为 =’’, Mysql 使用索引 , 并且由于是
. 与省市检索一样 , 这里没有用到 sex 索引 .
Mysql 在索引无法使用时 , 表现比 TCT 差 , 但只要能使索引生效 , Mysql 的性能就会高于 TCT, 分析游戏中需要检索排序的数据 :
找人 : 需要对玩家的 name 和 uid 进行 %% 方式的检索 , 在单独使用这两条检索时 , 无法命中索引 , 但是 , 这种检索的数据量为每玩家一条 , 也就是单表 50-100 万条左右 , 根据经验在这个范围内 Mysql 的全表扫描性能也能满足需求 .
日记 , 系统消息等检索 : 这些表数据量会比较大 , 但是这些表中建立索引都是可以命中的 .
寄售商品 : 与日记 , 系统消息相似 , 索引有效 , 并且数据量更小 .
排名 : 数据量与找人相同 , 但索引有效 .
TCT 在这一方面存在的另一个缺陷是只能支持单表 , 这实际上就导致了单表数据量增大 , 即便对于原本小数据量的表 , 在这种情况下 , 也会变成大数据量 .
10 万次操作 , 每次操作包括以下操作 : 连接 ( 打开连接 , 选择数据库 , 设置数据库编码 ), 一条更新 10 行的 update, 一条取前 10 条的全表扫描检索 ,
按照上述分块 , 操作过程中的平均时间为
一万并发 , 一万请求
版权声明:本文为博主原创文章,遵循 版权协议,转载请附上原文出处链接和本声明。