CockroachDB
viewfinderでDB悩んでた
Squareに買収された
shaded MySQLをつかっていた
みんなSQL使いたいけどスケーラブルにするのは厳しいんだと思ったので分散DBを週末プロジェクトでつくった
後に起業した
spenserは学生時代にgimp v1を作った人がメンバー Cでオブジェクト指向する
peterはGTKを使っていた
特徴
分散型DB
クラスター全体でデータを持つ
PostgresSQL互換
大陸を跨いだようなノード間でも分散できる
原子時計のような特殊なHWがいらない
ビジネスモデル SaaS
論文のメイン
clockとtransaction をどうするのか
レイヤー
SQL
をパースして
分散KVS にクエリする
PKをキーにしてrowの中身がvalueになってる
SQLのindexのデータがkey、vavueがPK
KVS
rocksDB
levelDBの激しいfork
その後pebble?にgoで書き直している
1つのレンジは3つのノードでコピーしている
同一クラスタ
レンジのinconsistencyはraftで管理 writeはリースホルダーに依頼する
ここの実装はDBによっていろいろある
transaction をどう実現するのか
流れ: リースホルダー探して依頼してレスポンスをもらって終わり
peformanceのために書き込みを遅延させる
書き込みリクエストはcommitした時点で実際に書き込まれる
parallelに書き込みできる
timestampがノードによって変わる問題への対応
ノードはSQLのtransaction 発生のタイムスタンプを保持する
transaction の実行ノードは現在のtimestampをもっておく
これがtransaction の実行時間になる
1つのオペレーションは複数のリースホルダーにアクセスする可能性がある
Selectしたときにリースホルダー(別のタイムスタンプかも)は、レスポンスするときにタイムスタンプを返す
帰ってきたタイムスタンプと現在のタイムスタンプが不一致したら対応する
先だったら、その時間内に問題があるかを確認する
一番進んだリースホルダーのタイムスタンプ
TLA+で検証している
時計
NTPで同期しているが、skewが発生する
HLCを導入してなんとかする