rethink db&tokudb调研测试报告

Post on 19-May-2015

3.857 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

Rethink db&tokudb调研测试报告

TRANSCRIPT

RethinkDB & TokuDB 调研测试报告

梁智超liangzhichao.pt@taobao.com

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

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

闪存和磁盘

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

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

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

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

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

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

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

磁盘 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

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

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

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

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

闪存写寿命

40TB(60GB drive)

60GB X 5000 =300TB

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

闪存的使用寿命

Ideal Micron C200 Intel X-25M0

50

100

150

200

250

300

350

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

40TB(60GB drive)

37TB(80GB drive)

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

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

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

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

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

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

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

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

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

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

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

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

生成加载数据

创建测试线程开始测试

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

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 的最大长度和最小长

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

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

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

测试程序运行前的CPU

利用

率 测试程序运行时的CPU

利用

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

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

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

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

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

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

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

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

append-only究竟带来了什么?

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

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

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

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

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的数据存储,需要有效地进行垃圾回收。

RethinkDB 的随机插入性能

RethinkDB 的随机插入性能

RethinkDB 的随机插入性能

RethinkDB 的随机插入性能

RethinkDB 的随机插入性能

RethinkDB 的随机查询性能

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

112318

121655

97803

458

5432760268

41745

16918

40843 42195 39970

157

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

Memcached RethinkDB Membase

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

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

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

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

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

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

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

Fractal Tree 的建立

创建临时存储

插入 15

Fractal Tree 的建立 (cont.)

插入 7

Merge

Fractal Tree 的建立 (cont.)

Merge

Fractal Tree 上的查询

数组有序!二分查找?

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

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 会获取一个表锁,用于将脏页刷到外存,所以会暂时阻塞其他操作

TokuDB 的随机插入性能

TokuDB 的随机查询性能

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)

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

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

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

TokuDB;

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

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

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

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

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

参考文献[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.

参考文献[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

参考文献[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]

Q & A

Thanks!

top related