ブログ@nnaka2992

データベースってなんだよ

YugabyteDBのドキュメントを全部読む Day1

Day1 最近Twitter改めXで「俺はDBのドキュメント端から端まで読んで強くなった」というX's1を複数みかけました。

PostgreSQL系NewSQLで最強になりたいのでYugabyteDBのドキュメントを順番に読んで行きます。 ドキュメントはv2.19に対応したものです。

手始めにArchitectureの一番先頭にあるDesign goalsから読みはじめます。

また画像は同ドキュメントより引用しています。

Design goals

YugabyteDBは以下を達成することを目標としている。 1. 分散トランザクションを提供しながら強い一貫性を保証する。 2. Query APIを再発明せず、既存のクエリ言語への互換を達成する。 3. 高いパフォーマンスを保証する。 4. 地理的に分散したデプロイを可能にする。 5. Cloud Native Databaseとしてデザインする。

一貫性

分断耐性

  • YugabyteDBはCAPの定理で言えばCPを中心に高い可用性を供えたデータベース
  • ネットワーク分断などを起因とするSplit BrainはRaft Group内であたらしいリーダーを選出することで対応している。
  • YugabyteDBではLeader Leaseという障害が発生しても常に一つのリーダが存在することを保証する仕組みを実装している。

直列化可能性

  • single-row Linearizable writeをサポートしている。

ACIDトランザクション

  • YugabyteDBではSeriarizable、Repetable Read、Read Committed Isolationの三つの分離レベルをサポートしている。
  • YSQL APIではこれら3つの分離レベルをサポートしているが、YCQLではRepeatable Readのみに対応している。

Query API

YugabyteDBではYSQLとYCQLという2種類のQuery APIをサポートしている。

YSQL

  • YSQLはPostgreSQLに互換したAPIPostgreSQLのクエリレイヤを再利用している。
  • 新しい変更は互換性を崩さない。
  • YSQLは新しいPostgreSQLに互換しつづけることを目標としている。

YCQL

  • YCQLはCassandraのクエイ言語から派生した半リレーショナルなクエリ言語で、Webスケールな膨大なwriteに対応してスケールし素早いデータ取得を目標としている。

パフォーマンス

  • C++で実装されているため高いパフォーマンスと巨大なHeap(RAM)をCacheとして利用できる。
  • SSDとNVMeに最適化している。
  • 高いWriteスループットとクライアントの同時実行性、高いデータ密度、増加し続けるデータへの対応を目標としている。

地理的分散

  • Zone、Multi Region、Multi Cloudいずれにも対応している。
  • これに対応するために、ノード障害やトラヒックのルーティングなどに対応できる必要がある。

クラウドネイティブアーキテクチャ

  • パブリッククラウドやオンプレミスで利用される一般てきなハードウェアで利用可能にする。
  • 原子時計のような特別なものに依存しない。
  • Kubernatesに対応している。
  • OSSで提供している。