# Riak
Riakは[[Dynamo]]に着想を得たオープンソースの分散キーバリューストアであり、[[Apache Cassandra]]・ScyllaDBと並ぶDynamo-styleの[[リーダーレスレプリケーション]]実装の代表例である。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 6 Replication]] "Leaderless Replication")
## 特徴
手動での衝突解決アプローチを採用し、並行書き込みで生じた全ての値(siblings)を保存して次回読み取り時にクライアントへ返し、アプリケーション側でのマージを求める。CouchDBと並びこの方式の代表例とされる。並行書き込みの検知には *dotted version vector*(通常のversion vectorの改良版)を用い、Riak 2.0で採用された。自動衝突解決の文脈ではCRDT(conflict-free replicated datatypes)の実装例としても挙げられており、Redis Enterprise・Azure Cosmos DBと並ぶ。マルチリージョン運用では、クライアント・ノード間通信を1リージョン内に閉じ、リージョン間のクラスタ間レプリケーションはマルチリーダーレプリケーションに近い形で非同期にバックグラウンドで行われる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 6 Replication]] "Manual conflict resolution", "Automatic conflict resolution", "Version vectors", "Multi-Region Operation")
## ストレージエンジン(詳説 データベース 第7章)
*詳説 データベース* 第7章は、Riak で使用されるストレージエンジンの1つとして [[Bitcask]] を挙げる。Bitcask は memtable を使わずデータレコードを直接ログファイルに格納し、keydir と呼ばれるインメモリの HashMap で各キーの最新値への参照を保持する、順序付けされていないログ構造化ストレージエンジンである[SHEEHY10b]。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]] §7.4.1)
## 関連
- ソース: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 6 Replication]] / [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]]
- 概念: [[リーダーレスレプリケーション]] / [[結果整合性]] / [[クォーラムベースレプリケーション]] / [[LSMツリー]]
- 実体: [[Dynamo]](設計の起源)/ [[Apache Cassandra]](同系統のOSS実装)/ [[Bitcask]](本エンティティが使用するストレージエンジン)
## 出典
- [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 6 Replication]](リーダーレスレプリケーションの実装例・手動衝突解決・dotted version vector・CRDT・マルチリージョン運用)
- [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]](§7.4.1 Bitcask — keydir とデータファイルのマッピング)