rethink db&tokudb调研测试报告

47
RethinkDB & TokuDB 调调调调调 调调调 [email protected]

Upload: iammutex

Post on 19-May-2015

3.857 views

Category:

Technology


7 download

DESCRIPTION

Rethink db&tokudb调研测试报告

TRANSCRIPT

Page 1: Rethink db&tokudb调研测试报告

RethinkDB & TokuDB 调研测试报告

梁智超[email protected]

Page 2: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 3: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 4: Rethink db&tokudb调研测试报告

闪存和磁盘

Page 5: Rethink db&tokudb调研测试报告

优势:1 )更快的读写速度2 )尺寸小重量轻3 )抗震省电

闪存和磁盘的差异闪存:1 )读 / 写 / 擦除三种操作2 )操作速度不一致 ( 读为 10 微秒级,写为 100微秒级,擦除为毫秒级 )3 )覆盖写之前需要擦除4 )擦除次数有限5 )操作粒度不一致,读和写以页为单位,擦除以块为单位

磁盘:1 )读 / 写两种操作2 )读写速度基本一致3 )可原位覆盖写4 )写次数不限5 )读写粒度一致

Page 6: Rethink db&tokudb调研测试报告

闪存的其他特性• 闪存芯片主要分为三种: SLC 、 MLC 和 TLC ,不

同种类的芯片也会展现出不同的特性。

Page 7: Rethink db&tokudb调研测试报告

闪存的劣势• 因为特殊的硬件架构,闪存上的随机写和小的写

操作不仅会降低性能而且会缩短闪存的使用寿命。

磁盘 SSD

freefreefreefree

freefree

freefreefreefree

freefree

data 1new data 1data 2data 3data 4

new data 3

blockblock

data 3data 2data 1 RAM

free

freefree

data 2data 3erased

erasederased

new data 1data 2data 3

Page 8: Rethink db&tokudb调研测试报告

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

闪存写寿命60GB X 5000 =300TB

闪存的写寿命:闪存上能够写的最大数据量

Page 9: Rethink db&tokudb调研测试报告

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

闪存写寿命

40TB(60GB drive)

60GB X 5000 =300TB

闪存的写寿命:闪存上能够写的最大数据量

Page 10: Rethink db&tokudb调研测试报告

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

闪存写寿命60GB X 5000 =300TB

40TB(60GB drive)

37TB(80GB drive)

闪存的写寿命:闪存上能够写的最大数据量

避免小的写以及随机写既能提高系统性能又能延长闪存的使用寿命!

闪存上的数据天然就具有多个版本!

Page 11: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 12: Rethink db&tokudb调研测试报告

压力测试工具• Memaslap 是 Memcached 服务器的压力测试工具。

- 产生可配置压力,线程、并发、连接、运行时间、覆盖、命中率、 key 的长度、 value 的长度等- 支持数据确认、失效时间确认、 UDP 、二进制协议等操作

• Mysqlslap 是 MySQL 服务器的压力测试工具,测试过程包括三个部分。- 创建 Schema 、 Table 以及其他存储程序或者数据 ( 单客户端连接 )- 运行加载测试 ( 多客户端连接 )- 结束测试如关闭连接、删除 Table( 单客户端连接 )

Page 13: Rethink db&tokudb调研测试报告

系统监测工具• Socktop 是由 Systemtap 提供的一个工具,位于 /

usr/share/doc/systemtap/examples/network 目录下。

• Tcprstat 是 Percona 提供的一个免费开源的 TCP 分析工具,可以观测网络流量并计算网络请求和响应之间的延迟。

• Nmon 工具是 IBM 提供的免费监控 AIX 系统和Linux 系统资源的工具,它可将系统资源的耗用情况收集起来并输出到一个特定的文件。

Page 14: Rethink db&tokudb调研测试报告

测试方法• 测试工具 + 监测工具

生成加载数据

创建测试线程开始测试

释放加载数据空间结束测试

TcprstatSocktopNmon

1) 对于 key-value 数据库,使用 libmemcached 进行测试,生成数据为字符串 key 和value;

2) 对于 MySQL 数据库,使用libmysql 进行测试,首先生成字符串 key 和 value ,然后将 key 和 value 并入到SQL 语句中。

1) 对于 key-value 数据库,调用接口 memcached_set 或者memcached_get;

2) 对于 MySQL 数据库,调用接口 mysql_real_query 。

获取配置参数

获取测试配置参数,设定测试线程数,每个线程执行的操作数,key 的最小长度

和最大长度, value 的最大长度和最小长

Page 15: Rethink db&tokudb调研测试报告

测试程序中的问题• 测试程序成了计算密集型而非 IO密集型。• 测试程序并发压力不够。

- 单独为线程生成测试数据- 每启动一个测试线程之前先为其生成数据- 解决方案:一次性生成所有测试数据,测试线程启动之后直接获取数据

• 文件句柄打开数受限。-在 shell 下用 ulimit -n 32768 操作不允许-修改 /etc/security/limits.conf 文件

测试程序运行前的CPU

利用

率 测试程序运行时的CPU

利用

Page 16: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 17: Rethink db&tokudb调研测试报告

RethinkDB 是什么• RethinkDB 是一个完全支持 Memcached 协议、数

据可持久化的工业级 key-value 存储系统。• RethinkDB 的特点:

- 随 CPU 个数线程扩展- SSD 上速度快十倍- 节省内存空间- 断电后及时恢复 - 细化的持久性控制- 支持上万的并发连接数- 支持裸盘设备,多磁盘上自动数据分区

Page 18: Rethink db&tokudb调研测试报告

RethinkDB 的安装和使用• RHEL 5 下直接安装 RethinkDB 包

- sudo rpm -i rethinkdb-1.0-1.0.0_1-1.x86_64.rpm- rpm -qa |grep rethinkdb rethinkdb-1.0-1.0.0_1-1

• 运行 RethinkDB- 默认安装在 /usr/bin/rethinkdb-1.0- ./rethinkdb-1.0 -f /u01/rethinkdb_data- ./rethinkdb-1.0 -f /u01/rethinkdb_data -c 4 -p 11500- ./rethinkdb-1.0 -f /u01/rethinkdb_data

-f /u03/rethinkdb_data -c 4 -p 11500

Page 19: Rethink db&tokudb调研测试报告

RethinkDB 的设计思想• B树会产生大量的随机写操作,对闪存寿命的负面影响很大。

• 闪存具有良好的随机读性能,所以 B树和 cluster index变得不再重要。

• 基于以上判断, RethinkDB采用 append-only 的方式来管理数据和索引,消除闪存上的随机写操作。

append-only究竟带来了什么?

Page 20: Rethink db&tokudb调研测试报告

Append-Only 的影响• 数据一致性 (Data Consistency) 。

- 所有更新追加到文件尾部,其他部分没有任何修改- 文件的其余部分提供了一个完全一致的数据库

• 热备份 (Hot Backups) 。- 在数据库文件被修改的同时可以拷贝一致数据- 可简单地实现增量备份

• 及时恢复 (Instantaneous Recovery)- 数据库本身就类似于一个事务日志- 恢复时直接截断数据库文件到一个已知一致的事务

Page 21: Rethink db&tokudb调研测试报告

Append-Only 的影响 (cont.)• 简单的主从复制 (Easy Replication) 。

- 机制与热备份相同• 无锁并发 (Lock-Free Concurrency)

- 只需一个锁来保护最后一个事务完成后文件的 offset- 读操作可以并发执行,写操作通过队列来管理

• 在线模式修改 (Live Schema Changes)- 修改模式时可以无障碍进行读操作- 在模式修改完成前每个写操作需要单独处理

append-only带来的限制:1) 在一个 insert 或者 update很频繁的 workload 下,大量数据很快就会过期;2) append-only消除了数据组织的数据局部性,虽然在 SSD 上随机读代价很小,但是仍旧是一个问题;3) 对于索引结构来说,每 50MB 的数据会生成 2GB的数据存储,需要有效地进行垃圾回收。

Page 22: Rethink db&tokudb调研测试报告

RethinkDB 的随机插入性能

Page 23: Rethink db&tokudb调研测试报告

RethinkDB 的随机插入性能

Page 24: Rethink db&tokudb调研测试报告

RethinkDB 的随机插入性能

Page 25: Rethink db&tokudb调研测试报告

RethinkDB 的随机插入性能

Page 26: Rethink db&tokudb调研测试报告

RethinkDB 的随机插入性能

Page 27: Rethink db&tokudb调研测试报告

RethinkDB 的随机查询性能

平均值 最大值 最小值 标准偏差

112318

121655

97803

458

5432760268

41745

16918

40843 42195 39970

157

随机查询 IOPS性能:测试线程数 1024,key大小为 8~16字节, value大小为 200字节

Memcached RethinkDB Membase

Page 28: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 29: Rethink db&tokudb调研测试报告

TokuDB 是什么• TokuDB 是一个应用在MySQL 和 MariaDB 中的存储引擎,它使用索引来加快查询速度,具有高扩展性并支持 Hot Schema Modification 。

• TokuDB 的特点:- 插入性能加快 20 到 80倍- 压缩数据减少存储空间- 数据量可扩展到几个 TB- 不会产生索引碎片- 支持 Hot Column Addition, Hot Indexing 和 MVCC

Page 30: Rethink db&tokudb调研测试报告

TokuDB 的安装和使用• TokuDB安装有两种方式。

- 下载 TokuDB 的 patch 和 MySQL 源码,给MySQL打上patch 之后安装MySQL- 下载已经打上 patch 的 MySQL 源码,直接安装MySQL

• 使用 MySQL sandboxes安装- tar xzf tokufractaltreeindex-5.0.4-30712-linux-x86_64.tar.gz- export LD_LIBRARY_PATH=$PWD/tokufractaltreeindex-5.0.4-30712-linux-x86_64/lib- make_sandbox mysql-5.1.52-tokudb-5.0.4-30712-linux-x86_64-glibc23.tar.gz

Page 31: Rethink db&tokudb调研测试报告

Fractal Tree• Fractal Tree 是 TokuDB 中使用的索引结构,是

TokuDB安身立命的根本,插入性能可以匹配 B树最好的情况,高于 B树最差情况两个数量级。

• Fractal Tree 结构特点:- 由多个有序的数组构成,大小呈指数级增长- 数组要么全空,要么全满- 数据插入到最小的数组,如果空间不够就将数据进行Merge

Page 32: Rethink db&tokudb调研测试报告

Fractal Tree 的建立

创建临时存储

插入 15

Page 33: Rethink db&tokudb调研测试报告

Fractal Tree 的建立 (cont.)

插入 7

Merge

Page 34: Rethink db&tokudb调研测试报告

Fractal Tree 的建立 (cont.)

Merge

Page 35: Rethink db&tokudb调研测试报告

Fractal Tree 上的查询

数组有序!二分查找?

1) 数组之间添加冗余元素2) 数组中的元素不必全满3)横向和纵向指向冗余元素4) Fractional Cascading

Page 36: Rethink db&tokudb调研测试报告

TokuDB 提供的特殊支持• Hot Index Creation , TokuDB允许在已有 table 上

创建索引,同时在索引创建的过程中可以进行insert 和 query 操作。- 需要设定服务器变量 set tokudb_create_index_online=on- 只能使用 create index 命令

• Hot Column Addition and Deletion(HCAD) , TokuDB允许在已有 table 上添加或者删除属性列,同时只在很短的时间内阻塞 update 和 query 操作。- HCAD 会获取一个表锁,用于将脏页刷到外存,所以会暂时阻塞其他操作

Page 37: Rethink db&tokudb调研测试报告

TokuDB 的随机插入性能

Page 38: Rethink db&tokudb调研测试报告

TokuDB 的随机查询性能

Page 39: Rethink db&tokudb调研测试报告

TokuDB占用的存储空间

Page 40: Rethink db&tokudb调研测试报告

Fractal Tree• TokuDB 是

Action InnoDB TokuDB

Importing ~40 million rows 119 min 20.596 sec 69 min 1.982 sec

INSERTing again, ~80 million rows total 5 hours 13 min 52.58 sec 56 min 44.56 sec

INSERTing again, ~160 million rows total 20 hours 10 min 32.35 sec 2 hours 2 min 11.95 sec

Size of table on disk 42 Gb 15 Gb

COUNT(*) query with GROUP BY 58 min 10.11 sec 5 min 3.21 sec

DELETE query 2 hours 46 min 18.13 sec 1 hour 14 min 57.75 sec

Size of table on disk 42 Gb 12 Gb

OPTIMIZE TABLE 1 day 2 hours 19 min 21.96 sec 21 min 4.41 sec

Size of table on disk 41 Gb 12 Gb

TRUNCATE TABLE 1 min 0.13 sec 0.27 sec

Size of table on disk 41 Gb 193 Mb (after waiting 60 seconds before doing an ls -l)

Page 41: Rethink db&tokudb调研测试报告

如何使用 TokuDB• 如果你要存储 blob ,不要使用 TokuDB ,因为它

限制记录不能太大;• 如果你的记录数量过亿,使用 TokuDB;• 如果你注重 update 的性能,不要使用 TokuDB ,

它没有 Innodb 快;• 如果你要存储旧的记录,使用 TokuDB;• 如果你想要缩小数据占用的存储空间,使用

TokuDB;

Page 42: Rethink db&tokudb调研测试报告

大纲• 闪存和磁盘• 压力测试方法• RethinkDB 简介及测试• TokuDB 简介及测试• 总结

Page 43: Rethink db&tokudb调研测试报告

总结• 了解了Memcached/RethinkDB/Membase/TokuDB

以及 Innodb 的相关文档。• 学习了 tcprstat/socktop/nmon/MySQL Sandbox

/mysqlslap/memaslap 等工具的使用。• 学习了 libmemcached 和 libmysql相关文档以及 API

的使用方法。• 学会了 Linux 下很多常用的命令。• 搞死my031089.sqa.cm4 两次!

Page 44: Rethink db&tokudb调研测试报告

参考文献[1] Gokul Soundararajan, Vijayan Prabhakaran, Mahesh

Balakrishnan and Ted Wobber. Extending SSD Lifetimes with Disk-Based Write Caches. 8th USENIX Conference on File and Storage Technologies (FAST '10), 2010.

[2] Laura M. Grupp Adrian M. Caulfield Joel Coburn Steven Swanson. Characterizing Flash Memory: Anomalies, Observations, and Applications. 42nd International Symposium on Microarchitecture, 2009.[3] The tcprstat User’s Manual. http://www.percona.com/docs /wiki/tcprstat:start[4] TokuDB v5.0.4 with Fractal Tree Indexing for MySQL v5.1.52 User’s Guide for linux. May 9, 2011.

Page 45: Rethink db&tokudb调研测试报告

参考文献[5] TokuDB v5.0.4 with Fractal Tree Indexing for MySQL v5.1.52 Quick Start Guide for linux. May 9, 2011.[6] Leif Walsh, Vyacheslav Akhmechet, and Mike Glukhovsky. RethinkDB—Rethinking Database Storage. July 21, 2009.[7] Libmemcached v0.50 documentation. http://docs. libmemcached.org/[8] MySQL 5.1 Reference Manual. http://dev.mysql.com/doc /refman/5.1/en/[9] Vadim Tkachenko. Detailed review of Tokutek storage engine. April 28, 2009.[10] MySQL sandboxes. http://forge.mysql.com/wiki/ MySQL_Sandbox#The_MySQL_Sandbox

Page 46: Rethink db&tokudb调研测试报告

参考文献[11] TokuView. http://www.tokutek.com/tokuview/.[12] RethinkDB Blog. http://blog.rethinkdb.com/.[13] RethinkDB Documentation Release 1.0. July 18, 2011.[14] Linux 下方便的 socket 读写查看器 socktop. http://blog. yufeng.info/archives/1280.[15] 调查服务器响应时间的利器 tcprstat. http://blog.yufeng. info/archives/963.[16] 老生常谈 : ulimit问题及其影响 . http://blog.yufeng.info /archives/1380.[17] 说说 TokuDB与 Fractal Tree Index. http://www.fcicq.net/ wp/?p=892[18]

Page 47: Rethink db&tokudb调研测试报告

Q & A

Thanks!