この記事では、2017年8月28日に開催されたRocksDBミートアップでSiddon Tangが行った講演の内容を紹介します。
講演者の紹介
RocksDBチームのみなさんこんにちは。本日はお招きいただきありがとうございます。
これから、TiKVでRocksDBをどのように利用しているのか説明していきたいと思います。本題に入る前に、簡単な自己紹介をします。PingCAPのチーフエンジニアを務めているSiddon Tangと申します。現在、次世代SQLデータベースであるTiDBと、キーと値の分散型トランザクションストアであるTiKVの開発に携わっています。私はオープンソースを強く支持しており、LedisDB(バックエンドエンジンもRocksDB)、go-mysql、go-mysql-elasticsearchなどのオープンソースプロジェクトを推進してきました。
アジェンダ
本日は、以下の事項を説明します。
- なぜRocksDBを選択したのか
- TiKVではどのようにRocksDBを利用しているのか
- RocksDBに対し、どのような貢献をしているのか
- 今後のプラン
なぜRocksDBを選択したのか
それでは始めましょう。当社は、LevelDBやWiredTiger等のエンジンではなく、RocksDBを利用することに決めました。それはなぜでしょうか。多くの理由があります。
- 第一に、RocksDBは高速です。単一のインスタンスに大量のデータがあっても、書き込み/読み取りのスピードを維持できます。
- そして言うまでもなく、RocksDBは安定しています。RocksDBチームは、安定性を保証するために多くのストレステストを行ってきました。
- また、組み込みが容易です。TiKVはRustで記述されているので、FFIを介し、RocksDBのC APIをRustで直接呼び出すことができます。
- 多くの役立つ機能を備えているほか、実稼働環境でそれらの機能を直接利用し、パフォーマンスを改善することができます。
- さらに、RocksDBは今でも速いペースで開発が進んでいます。多くの素晴らしい機能が追加され、パフォーマンスが改善し続けています。
- その上、RocksDBのコミュニティは非常に活発です。何かわからないことがあったら、気軽に相談することができます。多くのRocksDBチームメンバーと私たちは、WeChat(中国で広く普及しているIMツール)フレンドでもありますので、お互いに直接会話することができます。
RocksDBをどのように利用しているのか
TiKVのアーキテクチャ
RocksDBを利用することを決断した後、次の問題となるのは、TiKVでRocksDBをどのように利用するかということです。TiKVアーキテクチャの簡単な説明から始めましょう。

第一に、TiKVノードのデータはすべて、2つのRocksDBインスタンスを共有しています。1つはデータ用、もう1つはRaftログ用です。
リージョン
リージョンとは、ある範囲のデータを対象とした、論理的概念です。各リージョンは複数のマシンに常駐しており、多数の複製を持っています。これらすべての複製が1つのRaftグループを形成します。
