我们使用 YCSB 对比测试了 MyTopling 和 Microsoft 的 Azure SQL,MyTopling 的性能大约是 Azure 的两倍。
我们采用和 Azure 官方几乎一样的测试方案,以保证测试结果真实、可信、可复现。
Azure SQL 测试原文:Testing performance of Azure SQL Database as a key-value store
一、测试结果
1. MyTopling VS. Azure SQL
Azure 的 load 阶段数据未知,所以没有比较。
run 阶段:
2. MyTopling VS. MyRocks
二、为什么 MyTopling 这样快
MyTopling fork 自 facebook 的 myrocks-8.0.23,进行了大幅修改:
将存储引擎从 RocksDB 替换为 ToplingDB
对 myrocks 的接入层进行了深度优化
对 ToplingDB Transaction 进行了深度优化
Transaction 代码虽然在 ToplingDB/RocksDB 中,但其主要是为 MyTopling/MyRocks 服务的
支持 ToplingDB 的 分布式 Compact
支持 ToplingDB 的 CSPP_WBWI(CSPP WriteBatchWithIndex)
支持 ToplingDB 的 CSPP MemTable
支持 ToplingDB 的 ToplingFastTable
支持 ToplingDB 的 ToplingZipTable
MyTopling 优化后的索引创建的速度提升了 30 倍以上
MyTopling 在 Transaction 中使用 CSPP Tire 替换了 SkipList
三、测试环境
1. YCSB 版本
2. YCSB 客户端
云厂商: 阿里云
CPU&内存: 16核(vCPU)32 GiB
操作系统: Ubuntu 18.04 64位
实例规格: ecs.hfc7.4xlarge
3. JDBC 驱动器:
Azure:mssql-jdbc-8.4.1.jre11.jar
MyTopling:mysql-connector-java-8.0.26.jar
4. 云数据库:
Azure: Our first test was on a General Purpose database with 4 CPU cores and 20 GB of memory, using Gen5 hardware.
MyTopling: 4核(vCPU)16 GiB / Alibaba Cloud Linux 3.2104 LTS 64位 / ecs.hfg6.xlarge
5. db.properties
配置:
Azure:
1 | db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver |
MyTopling:
1 | com.mysql.cj.jdbc.Driver = |
6. 表
1 | CREATE TABLE usertable ( |
7. 工作负载(Workload)
使用 YCSB 默认之一 workloada,仅修改 recordcount 和 operationcount 值为 10000000。
1 | recordcount=10000000 |
8. YCSB 输出
Azure:
1 | [OVERALL], RunTime(ms), 1089898 |
MyTopling:
1 | [OVERALL], RunTime(ms), 582640 |