背景
p68以降の「整合性と永続性」の項にて、N, R, Wの値を適切に設定するとデータの整合性が保てないことを確認したかった。
結果
riak1.4.1
では再現可能な状態でriakの整合性を破壊することはできなかった。HTTPによってデータのI/Oを行い、偶発的に404 status code
を得ることができたが、その後のリクエストではデータの整合性が保たれたりした。
考察
riakのデータの整合性を保証するための機構としてvector clock
, read repair
, AAE(active anti entropy)
という機能が存在する。
-
vector clock
はriak内でデータのI/O順序などのデータを記録するデータ構造 -
read repair
はread系リクエストに際してデータの不整合が確認された場合、vector clock
を基にデータを修復する受動的機構 -
AAE
は能動的にデータの不整合を検知してデータを修復する機構
なのですが、2013/2のriak1.3
においてAAE
が実装されていることが判明しています。
7つのデータベース7つの世界は2012年に執筆され、2013/1に訳されているために、AAE
を考慮しない構成になっている可能性が高いと考えられました。
その後
dev/dev1/etc/riak(あるいはapp).conf
においてanti_entropy = passive
を設定し、ノードをrelaodしたり試したのですが、一向に整合性を乱せないので諦めました。
7databasesを学ばれる皆さんはお気をつけください。また、何か分かったらご一報をよろしくお願いします。
感想
riak、防御力高い。Erlangの言語仕様(message passing)すごい。
5人で「riakを殺そう」を合い言葉に頑張るの、MMORPGでボスの体力を削ってる気分で楽しかったので皆さんにもオススメです!