差分管理と操作記録の違いについて考えてみた
経緯
RedisとMemcachedの違いについて疑問に思うことがありました。 調べてみた結果、違いとしてRedisのAOFについて違いがあるということを知りました。
AOFについて調べてみましたが、操作履歴と差分管理の違いがピンと来ず、 腹落ちする感覚がありませんでした。 そこで、操作履歴管理と差分管理の違いについて考えてみることにしました。
AOFとは
操作履歴管理と差分管理の違いを考える前に、AOFについて簡単に説明します。 AOF(Append Only File)は、Redisのデータを保存するためのファイルです。 データの操作履歴をファイルに追記していくことで、データの永続化を実現している仕組みです。
ここで、AOFが採用している操作履歴管理と差分管理との違いがなんだろうという疑問が湧きました。
差分管理との違い
差分管理は、データの変更があった際にその変更部分だけを記録します。
対して、AOFのような操作履歴管理では、データの変更があった際にその操作内容(過程)まで記録します。
ここまで考えて、両者の違いについては分かったような気がしますが、 操作履歴があると何が嬉しいのか?という疑問が残りました。
具体例を考えてみる
上記の疑問を解決するために、具体的な例を考えてみることにしました。
考察のために、簡単な例を考えてみます。
例えば、以下のようなデータがあるとします。
some_key: 10
ここに対して、以下のような変化があったとします。
some_key: 20
この例に基づいて、差分管理と操作履歴管理の違いについて考えてみます。
差分管理の場合、変化を記録する際、10 -> 20という結果だけを記録することになります。
操作履歴の場合、過程が記録されるため、実際に+10という操作をしたのか、2倍になったのか、という操作を区別して記録されます。
つまり、差分管理では、どのような操作を行ったか、という情報が失われてしまいます。
操作履歴管理では、どのような操作を行ったか、という過程の情報が残るということになるため、情報量が異なるということが分かりました。
より違いについて理解が深まった気がします。
しかし、具体的にどんな場面でこの情報が必要になるのか、という疑問が残ります。
どんな場面で必要になるのか
どんな場面で必要になるのか?
これに関しては、それがないと困るケースについて考えてみました。 以下のようなケースが考えられると思います。
- ドメイン上重要なケース
- トレーサビリティ
- システム上重要なケース
- デバッグ
- パフォーマンスチューニング
ここまで考えてみると、AOFはデータの永続化だけでなく、 操作履歴を残すことで、デバッグや履歴の管理に役立つということが結論になりました。
メリットとデメリット
ここまでで違いとして、情報量に違いがあることが理解できました。
差分管理は、変更部分だけを記録するため、情報量が少ないです。 一方、操作履歴は結果だけでなく、その過程まで記録するため、情報量が多くなります。
ここまでの考察を統合すると以下の結論を導くことができます。
- メリット
- ドメイン上重要なケースやシステム上重要なケースにおいて有用となる
- デメリット
- 情報量が多くなり、データ量が増える
AOFはデータの永続化だけでなく、操作履歴を残すことで、デバッグや履歴の管理に役立つということになります。 情報量としては、差分管理よりも多いため、データ量が増えるというデメリットもあるかもしれませんが、 デバッグや履歴の管理に役立つというメリットがあるため、AOFを採用することで、デメリットを上回るメリットがあるという結論になりました。
まとめ
RedisのAOFから出発し、差分管理と操作履歴管理の違いについて考えてみました。
操作履歴を残すことは、デバッグや履歴の管理に役立つという理解をしました。 ですが、「具体的にメリット・デメリットがどういう場面で影響してくるのか?」 という観点では、まだまだ疑問が残ります。
また、実用なケース、例えばインメモリDBを検討する場合では、AOFはあくまでRedisの1側面に過ぎないため、総合的に考える必要もあると思います。
参考
KJR020's Blog