java - 如何在应用程序/数据库中保留未提交的数据直到它被提交
问题描述
我有一个场景,cms 用户通过应用程序/CMS 对数据进行的任何更新/更改都需要管理员/授权用户的批准。单个文档/记录中的一次更新可能有多个更改。此批准不会实时完成,可能需要几个小时或几天。授权人也可以拒绝更改。因此,在这种情况下,在批准或拒绝之前不将其提交到数据库的情况下,保持这些数据有效的最佳方法是什么。我应该创建临时表还是重复表以将这些数据临时保存在数据库中?但这会导致大量临时表(每个表一个)。或者在开发人员/应用程序/java端还有其他选择吗?我在这里使用 Oracle 和 Java。
解决方案
你需要更好地理解问题。您不需要一个数据存储,您需要两个数据存储。
数据存储区一(可能是表一)将包含未经批准的更改。这是“建议”状态。一旦用户请求更改,您将立即将所有数据写入并提交到此数据存储中。
数据存储二(可能是表二)将包含已批准的更改;这是“真实”的状态。数据存储区一中的更改经过审核和批准后,您必须在此处应用更改。
另一个可能的解决方案是使用 Kafka 主题:
- 使用 Kafka 主题来存储未批准的更改。
- 将主题提供给审阅者。
- 获得批准后,记下决定(在同一主题中)并将更改写入数据库。
注意:
datastore 1 和datastore 2 可以是同一张表,只是有一列分别表示“approved change”、“declined change”和“pending change”。
推荐阅读
- c++ - 使用 clang-tidy 分析嵌入式 GCC 项目
- web - 如何在 Svelte spa 路由器中删除“#”?
- javascript - 在单个工具提示中插入包含图像和文本数据的两列表
- oracle - 使用 oracle jdbc 驱动程序的“提示”格式化查询输出
- asp.net - 更好的 ReportViewer 控件?
- python-3.x - 破折号巧妙地克服了重复的回调
- c - 直接从 C 中的函数调用访问结构元素
- javascript - 我需要访问对象内的属性,但它总是以未定义的形式返回
- python - 迭代和组合列表中的元素
- javascript - 添加 cipher.update() 和 cipher.final() 并连接它们有什么区别?