Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rethink db&tokudb调研测试报告

35,209 views

Published on

Published in: Technology
  • Be the first to comment

Rethink db&tokudb调研测试报告

  1. 1. RethinkDB & TokuDB调研测试报告<br />梁智超<br />liangzhichao.pt@taobao.com<br />
  2. 2. 大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  3. 3. 大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  4. 4. 闪存和磁盘<br />
  5. 5. 闪存和磁盘的差异<br />闪存:<br />1)读/写/擦除三种操作<br />2)操作速度不一致(读为10微秒级,写为100微秒级,擦除为毫秒级)<br />3)覆盖写之前需要擦除<br />4)擦除次数有限<br />5)操作粒度不一致,读和写以页为单位,擦除以块为单位<br />优势:<br />1)更快的读写速度<br />2)尺寸小重量轻<br />3)抗震省电<br />磁盘:<br />1)读/写两种操作<br />2)读写速度基本一致<br />3)可原位覆盖写<br />4)写次数不限<br />5)读写粒度一致<br />
  6. 6. 闪存的其他特性<br /><ul><li>闪存芯片主要分为三种:SLC、MLC和TLC,不同种类的芯片也会展现出不同的特性。</li></li></ul><li>闪存的劣势<br /><ul><li>因为特殊的硬件架构,闪存上的随机写和小的写操作不仅会降低性能而且会缩短闪存的使用寿命。</li></ul>磁盘<br />SSD<br />RAM<br />free<br />free<br />data 1<br />new data 1<br />data 1<br />erased<br />new data 1<br />block<br />free<br />free<br />data 2<br />data 2<br />erased<br />data 2<br />free<br />data 2<br />free<br />free<br />data 3<br />new data 3<br />data 3<br />erased<br />data 3<br />free<br />data 3<br />free<br />free<br />data 4<br />block<br />free<br />free<br />free<br />free<br />free<br />
  7. 7. 闪存的使用寿命<br />闪存的写寿命:闪存上能够写的最大数据量<br />
  8. 8. 闪存的使用寿命<br />闪存的写寿命:闪存上能够写的最大数据量<br />60GB X 5000 =300TB<br />40TB<br />(60GB drive)<br />
  9. 9. 闪存的使用寿命<br />闪存的写寿命:闪存上能够写的最大数据量<br />60GB X 5000 =300TB<br />避免小的写以及随机写既能提高系统性能又能延长闪存的使用寿命!<br />闪存上的数据天然就具有多个版本!<br />40TB<br />(60GB drive)<br />37TB<br />(80GB drive)<br />
  10. 10. 大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  11. 11. 压力测试工具<br />Memaslap是Memcached服务器的压力测试工具。<br /> - 产生可配置压力,线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度等<br /> - 支持数据确认、失效时间确认、UDP、二进制协议等操作<br />Mysqlslap是MySQL服务器的压力测试工具,测试过程包括三个部分。<br />- 创建Schema、Table以及其他存储程序或者数据(单客户端连接)<br /> - 运行加载测试(多客户端连接)<br /> - 结束测试如关闭连接、删除Table(单客户端连接)<br />
  12. 12. 系统监测工具<br />Socktop是由Systemtap提供的一个工具,位于/usr<br /> /share/doc/systemtap/examples/network目录下。<br />Tcprstat是Percona提供的一个免费开源的TCP分析工具,可以观测网络流量并计算网络请求和响应之间的延迟。<br />Nmon工具是IBM提供的免费监控AIX系统和Linux系统资源的工具,它可将系统资源的耗用情况收集起来并输出到一个特定的文件。<br />
  13. 13. 测试方法<br />测试工具+监测工具<br />对于key-value数据库,使用libmemcached进行测试,生成数据为字符串key和value;<br />对于MySQL数据库,使用libmysql进行测试,首先生成字符串key和value,然后将key和value并入到SQL语句中。<br />获取测试配置参数,设定测试线程数,每个线程执行的操作数,key的最小长度和最大长度,value的最大长度和最小长度<br />获取配置参数<br />生成加载数据<br />对于key-value数据库,调用接口memcached_set或者memcached_get;<br />对于MySQL数据库,调用接口mysql_real_query。<br />Tcprstat<br />Socktop<br />Nmon<br />创建测试线程开始测试<br />释放加载数据空间结束测试<br />
  14. 14. 测试程序中的问题<br />测试程序成了计算密集型而非IO密集型。<br />测试程序并发压力不够。<br /> - 单独为线程生成测试数据<br /> - 每启动一个测试线程之前先为其生成数据<br /> - 解决方案:一次性生成所有测试数据,测试线程启动之后直接获取数据<br />文件句柄打开数受限。<br />-在shell下用ulimit -n 32768操作不允许<br /> -修改/etc/security/limits.conf文件<br />测试程序运行前的CPU利用率<br />测试程序运行时的CPU利用率<br />
  15. 15. 大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  16. 16. RethinkDB是什么<br /><ul><li>RethinkDB是一个完全支持Memcached协议、数据可持久化的工业级key-value存储系统。
  17. 17. RethinkDB的特点:</li></ul>-随CPU个数线程扩展<br /> -SSD上速度快十倍<br /> - 节省内存空间<br /> - 断电后及时恢复<br /> - 细化的持久性控制<br /> - 支持上万的并发连接数<br /> - 支持裸盘设备,多磁盘上自动数据分区<br />
  18. 18. RethinkDB的安装和使用<br /><ul><li>RHEL 5下直接安装RethinkDB包</li></ul>- sudo rpm -i rethinkdb-1.0-1.0.0_1-1.x86_64.rpm<br /> - rpm -qa |greprethinkdb rethinkdb-1.0-1.0.0_1-1<br /><ul><li>运行RethinkDB</li></ul> - 默认安装在/usr/bin/rethinkdb-1.0<br /> - ./rethinkdb-1.0 -f /u01/rethinkdb_data<br /> - ./rethinkdb-1.0 -f /u01/rethinkdb_data -c 4 -p 11500<br /> - ./rethinkdb-1.0 -f /u01/rethinkdb_data<br /> -f /u03/rethinkdb_data -c 4 -p 11500<br />
  19. 19. RethinkDB的设计思想<br /><ul><li>B树会产生大量的随机写操作,对闪存寿命的负面影响很大。
  20. 20. 闪存具有良好的随机读性能,所以B树和cluster index变得不再重要。
  21. 21. 基于以上判断,RethinkDB采用append-only的方式来管理数据和索引,消除闪存上的随机写操作。</li></ul>append-only究竟带来了什么?<br />
  22. 22. Append-Only的影响<br /><ul><li>数据一致性(Data Consistency)。</li></ul>- 所有更新追加到文件尾部,其他部分没有任何修改<br /> - 文件的其余部分提供了一个完全一致的数据库<br /><ul><li>热备份(Hot Backups)。</li></ul>- 在数据库文件被修改的同时可以拷贝一致数据<br /> - 可简单地实现增量备份<br /><ul><li>及时恢复(Instantaneous Recovery)</li></ul>- 数据库本身就类似于一个事务日志<br /> - 恢复时直接截断数据库文件到一个已知一致的事务<br />
  23. 23. Append-Only的影响(cont.)<br /><ul><li>简单的主从复制(Easy Replication)。</li></ul>- 机制与热备份相同<br /><ul><li>无锁并发(Lock-Free Concurrency)</li></ul>- 只需一个锁来保护最后一个事务完成后文件的offset<br /> - 读操作可以并发执行,写操作通过队列来管理<br /><ul><li>在线模式修改(Live Schema Changes)</li></ul>- 修改模式时可以无障碍进行读操作<br /> - 在模式修改完成前每个写操作需要单独处理<br />append-only带来的限制:<br />1) 在一个insert或者update很频繁的workload下,大量数据很快就会过期;<br />2) append-only消除了数据组织的数据局部性,虽然在SSD上随机读代价很小,但是仍旧是一个问题;<br />3) 对于索引结构来说,每50MB的数据会生成2GB的数据存储,需要有效地进行垃圾回收。<br />
  24. 24. RethinkDB的随机插入性能<br />
  25. 25. RethinkDB的随机查询性能<br />
  26. 26. 大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  27. 27. TokuDB是什么<br /><ul><li>TokuDB是一个应用在MySQL和MariaDB中的存储引擎,它使用索引来加快查询速度,具有高扩展性并支持Hot Schema Modification。
  28. 28. TokuDB的特点:</li></ul>- 插入性能加快20到80倍<br /> - 压缩数据减少存储空间<br /> - 数据量可扩展到几个TB<br /> - 不会产生索引碎片<br /> - 支持Hot Column Addition, Hot Indexing和MVCC<br />
  29. 29. TokuDB的安装和使用<br /><ul><li>TokuDB安装有两种方式。</li></ul>- 下载TokuDB的patch和MySQL源码,给MySQL打上patch之后安装MySQL<br /> - 下载已经打上patch的MySQL源码,直接安装MySQL<br /><ul><li>使用MySQL sandboxes安装</li></ul>- tar xzf tokufractaltreeindex-5.0.4-30712-linux-x86_64.tar.gz<br /> - export LD_LIBRARY_PATH=$PWD/tokufractaltreeindex-5.0.4-30712-linux-x86_64/lib<br /> - make_sandbox mysql-5.1.52-tokudb-5.0.4-30712-linux-x86_64-glibc23.tar.gz<br />
  30. 30. Fractal Tree<br /><ul><li>Fractal Tree是TokuDB中使用的索引结构,是TokuDB安身立命的根本,插入性能可以匹配B树最好的情况,高于B树最差情况两个数量级。
  31. 31. Fractal Tree结构特点:</li></ul>- 由多个有序的数组构成,大小呈指数级增长<br /> - 数组要么全空,要么全满<br /> - 数据插入到最小的数组,如果空间不够就将数据进行Merge<br />
  32. 32. Fractal Tree的建立<br />创建临时存储<br />插入15<br />
  33. 33. Fractal Tree的建立 (cont.)<br />插入7<br />Merge<br />
  34. 34. Fractal Tree的建立 (cont.)<br />Merge<br />
  35. 35. Fractal Tree上的查询<br />数组有序!<br />二分查找?<br />1)数组之间添加冗余元素<br />2)数组中的元素不必全满<br />3)横向和纵向指向冗余元素<br />4) Fractional Cascading<br />
  36. 36. TokuDB提供的特殊支持<br /><ul><li>Hot Index Creation,TokuDB允许在已有table上创建索引,同时在索引创建的过程中可以进行insert和query操作。</li></ul>- 需要设定服务器变量set tokudb_create_index_online=on<br /> - 只能使用create index命令<br /><ul><li>Hot Column Addition and Deletion(HCAD),TokuDB允许在已有table上添加或者删除属性列,同时只在很短的时间内阻塞update和query操作。</li></ul>- HCAD会获取一个表锁,用于将脏页刷到外存,所以会暂时阻塞其他操作<br />
  37. 37. TokuDB的随机插入性能<br />
  38. 38. TokuDB的随机查询性能<br />
  39. 39. TokuDB占用的存储空间<br />
  40. 40. Fractal Tree<br /><ul><li>TokuDB是</li></li></ul><li>如何使用TokuDB<br /><ul><li>如果你要存储blob,不要使用TokuDB,因为它限制记录不能太大;
  41. 41. 如果你的记录数量过亿,使用TokuDB;
  42. 42. 如果你注重update的性能,不要使用TokuDB,它没有Innodb快;
  43. 43. 如果你要存储旧的记录,使用TokuDB;
  44. 44. 如果你想要缩小数据占用的存储空间,使用TokuDB;</li></li></ul><li>大纲<br />闪存和磁盘<br />压力测试方法<br />RethinkDB简介及测试<br />TokuDB简介及测试<br />总结<br />
  45. 45. 总结<br /><ul><li>了解了Memcached/RethinkDB/Membase/TokuDB以及Innodb的相关文档。
  46. 46. 学习了tcprstat/socktop/nmon/MySQL Sandbox</li></ul> /mysqlslap/memaslap等工具的使用。<br /><ul><li>学习了libmemcached和libmysql相关文档以及API的使用方法。
  47. 47. 学会了Linux下很多常用的命令。
  48. 48. 搞死my031089.sqa.cm4两次!</li></li></ul><li>参考文献<br />[1] GokulSoundararajan, VijayanPrabhakaran, Mahesh Balakrishnan and Ted Wobber. Extending SSD Lifetimes with Disk-Based Write Caches. 8th USENIX Conference on File and Storage Technologies (FAST '10), 2010.<br />[2] Laura M. Grupp Adrian M. Caulfield Joel Coburn Steven <br /> Swanson. Characterizing Flash Memory: Anomalies, <br /> Observations, and Applications. 42nd International<br />  Symposium on Microarchitecture, 2009.<br />[3] The tcprstat User’s Manual. http://www.percona.com/docs<br /> /wiki/tcprstat:start<br />[4] TokuDB v5.0.4 with Fractal Tree Indexing for MySQL v5.1.52<br /> User’s Guide for linux. May 9, 2011.<br />
  49. 49. 参考文献<br />[5] TokuDB v5.0.4 with Fractal Tree Indexing for MySQL v5.1.52<br /> Quick Start Guide for linux. May 9, 2011.<br />[6] Leif Walsh, VyacheslavAkhmechet, and Mike Glukhovsky. <br />RethinkDB—Rethinking Database Storage. July 21, 2009.<br />[7] Libmemcached v0.50 documentation. http://docs.<br /> libmemcached.org/<br />[8] MySQL 5.1 Reference Manual. http://dev.mysql.com/doc<br /> /refman/5.1/en/<br />[9] VadimTkachenko. Detailed review of Tokutek storage engine. <br /> April 28, 2009.<br />[10] MySQL sandboxes. http://forge.mysql.com/wiki/<br />MySQL_Sandbox#The_MySQL_Sandbox<br />
  50. 50. 参考文献<br />[11] TokuView. http://www.tokutek.com/tokuview/.<br />[12] RethinkDB Blog. http://blog.rethinkdb.com/.<br />[13] RethinkDB Documentation Release 1.0. July 18, 2011.<br />[14] Linux下方便的socket读写查看器socktop. http://blog.<br /> yufeng.info/archives/1280.<br />[15] 调查服务器响应时间的利器 tcprstat. http://blog.yufeng.<br /> info/archives/963.<br />[16] 老生常谈: ulimit问题及其影响. http://blog.yufeng.info<br /> /archives/1380.<br />[17] 说说TokuDB与Fractal Tree Index. http://www.fcicq.net/<br />wp/?p=892<br />[18] <br />
  51. 51. Q & A<br />Thanks!<br />

×