我刚刚看了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 来完成吗?任何事务流数据库都可以做到这一点吗?我对用于管理目的的此类功能感兴趣。我有一些网站,客户不小心删除了员工或修改了他们无意修改的记录。过去,我通过创建一个单独的表来解决这个问题,该表记录了对数据库的所有更改,然后当出现问题时,我可以(手动)查看该表,找出他们做错了什么,并(手动)修复数据。
如果我可以只看一个事务流,删除坏的,然后说“重新生成数据库”,那就更酷了