見出し画像

劔"Tsurugi"とは何か

劔"Tsurugi"とは

劔"Tsurugi"は、国産の OSS-次世代 RDB です。5 年間の国(NEDO)の支援を経て、出来上がった RDB になります。

もともと有志の勉強会から始まったコミュニティ活動がベースで、国の予算を受けて、
・各民間企業(ノーチラス・テクノロジーズ/NEC)
・大学(東京工業大学・慶応大学・名古屋大学・大阪大学)
・研究機関(国立天文台)
等々が主体となって、さまざまな企業・関係者の協力のもとに開発されました。

OSS なので、だれでも自由に利用することができます。
ライセンスは Apache2.0 になります。商用サポートも提供されています。

背景と基礎性能

なにをイマサラ RDB なのか?すでに枯れている技術ではないのか?というのが、普通のユーザ/エンジニアの印象だと思います。

実際は、RDB の技術は年々進歩しています。

にもかかわらず既存の RDB では、このような新しい技術はなかなか取り入れられないのが実態です。これは主に、イノベーションのジレンマと、寡占化による競争緩和、そして各 RDB の機能拡張によるコードベースの肥大化によるものでしょう。

その結果、既存の RDB が、旧来の環境である「メモリーは貴重・コアは少なめ・基本は Disk」を前提としたアーキテクチャを刷新し、現在の環境である「大容量メモリー・メニーコア・分散環境」へ全面的に適応を行うことは困難になってしまっています。

劔"Tsurugi"はこの 20 年来の RDB での世界的な、技術的成果を取り入れ、大容量メモリー・メニーコア環境を活かすことができるアーキテクチャを、一から構築してできあがった RDB です。

ベースパフォーマンス

劔"Tsurugi"のベースパフォーマンスは以下になります。

[図1]劔"Tsurugi"のパフォーマンス

特に30コア以上で伸びは顕著です。
これは業界標準のYCSB-A(read 50% / write 50%)によるものです。
100コア近辺ではスループットで400万TPS/遅延で200ナノ秒になっています。

これは"Shirakami"という、劔"Tsurugi"のエンジン部分の基礎性能です。
外側にSQL/通信処理等々の層をつけていくと、このほどのパフォーマンスはでません。
とはいえ、ベースの基礎性能は出ているので、現状の特に最適化を入れていない素の状態で、30コア近辺で、すでに既存のRDBの性能を凌駕していきます。より多くのコア数では差は一方的になります。

[図2]劔"Tsurugi"の基本性能

アーリーアクセス版について

この劔"Tsurugi"は7/10現在、まだα版での提供のみです。

基礎性能と通常のRDBとしての最低限の機能は満たしていますが、まだまだ機能が足りません。9月のGAを目指して機能拡張・性能向上を行っています。

ただし、大きな特長の一つである、「バッチ処理/write-heavy-transaction」に秀でている機能はすでに、十分利用でき水準かつ、極めて高い性能がでるようになっています。

とりあえず、試してみたい、というようなお客様には、αとしての提供を開始し、商用サポートを始めています。

劔"Tsurugi"の難しさ

劔"Tsurugi"は、この20年間の大きくパラダイムシフトした、新しいRDBのアーキテクチャを全面的に採用しています。
基本的な挙動は今までのRDBと変わりませんが、いろいろと知っておいた方がよい事項が、それこそ山のようにあります。

主なものを以下に順に挙げます。

・MVCC/TimeStampベース

従来のRDBは、基本はsingle version(mono version)+lockベースでのアルゴリズム・アーキテクチャで動いています。
劔"Tsurugi"は、multi version + timestampベースのアルゴリズム・アーキテクチャで動作しています。

両者ともに一貫性(serializable)を担保していますが、前者が「貴重なリソースを使い回す」ポリシーなのに対して、後者は「豊富なリソースを使い倒す」というポリシーです。

論理的には等価ですが、考え方としてまったくの別物です。

もちろん、以前にもmulti version(MVCC)の実装はありました。しかし、これらはあくまで、single versionの延長線上のもので、MVCCの本来のポテンシャルを活かすにはほど遠いものです。

劔"Tsurugi"では、MVCC/TimeStampベースをその基礎に据えて作り上げられている仕組みです。

・HybridCC

劔"Tsurugi"の基本はOCCです。
これは非常に軽量かつ高速なアルゴリズムですが、バッチ処理は勿論、通常のフルキャンですら並列処理ができない、という致命的な欠陥があります。

劔"Tsurugi"は、OCCとは別にバッチ処理に特化した、MVCCのアルゴリズム(LTX)を開発して実装しています。さらに、このLTXとOCCが混在できるようにしています。

バッチ処理のような重たい処理がないときはOCCで、逆にある程度大きな処理を行うときはLTXで、という風に複数のプロトコルを“同時”に利用して最適なリソースマネージメントができるようにしています。

・多様なインターフェース

従来のモノリシックなRDBと異なり、劔"Tsurugi"はコンポーネントベースのアーキテクチャで作られたRDBです。

このアーキテクチャにより、コードベースを肥大化させずに様々なインターフェースを提供しています。JDBCライクな同期JavaAPI、非同期ベースのJavaAPI、WebAPI、Dump/Loadインターフェイス、Postgres接続、等々です。

また、ベースのトランザクションエンジンの一貫性担保により、複数のインターフェイスを同時に利用することができます。JavaのAPIでバッチ処理を実行中に、WebAPI経由で、そのバッチ処理中のテーブルに普通にアクセスすることも、普通に実行することができます。

次回以降は、より詳細に劔"Tsurugi"のパフォーマンス・内部を紹介していきます。

神林飛志

関連リンク

▽導入事例などの詳細、試用のお申込みはコチラ
劔"Tsurugi"コミュニティサイト(https://www.tsurugidb.com/

▽Tsurugiに関するプレスリリースはコチラ
https://prtimes.jp/main/html/rd/p/000000001.000124881.html

この記事が気に入ったらサポートをしてみませんか?