facebook 将数据库从hbase切换到myrocks以提高性能
最近facebook宣布已成功完全将messenger数据库从hbase软切换到myrocks。这样做的结果就是提高了性能,节约了存储空间。
facebook messenger最开始使用的是cassandra,后来将其开源并移交了apache基金会,后来messenger又转为使用hbase,现在又转为myrocks - 一个facebook的mysql的引擎实现。
这其中主要的特点是从普通硬盘(spinning disk)到flash硬盘,使用的是facebook的Lightning Server SKU服务。
据facebook介绍,转换的出发点当然是为了提升性能:
- mysql复制拓扑结构更适合facebook的数据中心环境
- 使得能够在减少物理复制个数的情况下同时提高可用性(availability)和容灾恢复(disaster recovery)。
Messenger这么大的吞吐量(1 billion accounts,十亿用户)的项目从NOSQL(hbase)又回到了SQL(mysql),这个视角的原因,文中并没有提到。
myrocks 优化写性能和存储空间的mysql引擎
其实myrocks读写都优化了,只是写优化更明显。
- 将pagesize从8kb(innodb)减少为5kb
- 使用LSM算法优化写
- 减少索引,元数据的存储空间,总体减少更多的存储空间
无宕机时间的迁移策略
这个过程还有个亮点是无宕机的完全迁移,简言之是初期同时写入旧的数据库hbase,和新的数据库myrocks.
经过多方验证后保证所有数据已完全切换到myrocks后,再将hbase下线,用户完全感受不到这个过程。
PS
有趣的是,Facebook的这篇文章出来后,NOSQL to SQL的相关文章冒出来很多,举例: Have you ever chosen Postgres over Mongo and regretted it?
Thank You for Your Help NoSQL, but We Got It from Here