Turning the database inside-outを見たところ、Samza と Redux の類似点に気付きました。すべての状態は、不変オブジェクトのストリームで構成されています。
これにより、事後的にストリームを編集した場合、理論上はトランザクションの新しいリストに基づいてすべての具体化されたビューを再生成し、実際にはデータベースへの過去の変更を「元に戻す」ことができることに気付きました。
例として、次の一連の差分があるとします。
1. Add user "tom"
2. Add user "bob"
3. Delete user "bob"
4. Change user "tom"s name to "joe"
5. Add user "fred"
この一連の変更の後、データベースは次のようになります。
+-------+
| users |
+-------+
| joe |
| fred |
+-------+
番号「3」を元に戻したい場合はどうすればよいでしょうか。新しい差分セットは次のようになります。
1. Add user "tom"
2. Add user "bob"
4. Change user "tom"s name to "joe"
5. Add user "fred"
そして私たちのデータベース:
+-------+
| users |
+-------+
| joe |
| bob |
| fred |
+-------+
これは理論上は良さそうに思えますが、実際に Samza、Storm、または Spark を使用して実行できるのでしょうか? どのトランザクション ストリーム データベースでもこれを実行できますか? このような管理目的の機能に興味があります。クライアントが誤って従業員を削除したり、意図しないレコードを変更したりするサイトがいくつかあります。過去に、データベースへのすべての変更を記録する別のテーブルを作成することでこれを解決し、問題が発生したときに (手動で) このテーブルを見て、何が間違っていたかを把握し、(手動で) データを修正しました。
トランザクション ストリームを見て、悪いものを削除し、「データベースを再生成してください」と言うことができれば、とてもクールです。