sql - 调用程序的锁定问题
问题描述
我有 pgmA,它由 50 个程序调用。pgmA 在输入模式下有详细文件。。50 个调用程序中的一些在更新模式下有详细文件。根据新要求,我将以 XML 格式获取 PGMA 中的详细文件记录。需要打破和更新..解析很好,但我担心更新 PgmA 中的详细文件,因为调用程序可能会锁定记录,而且我可能会遇到被同一份工作锁定的问题!分析这些程序也有点困难,因为它们多次调用 PgmA 并且代码又大又旧..任何建议如何在没有锁定的情况下更新详细文件...建议我任何解决方案..
解决方案
简短的回答是:如果不先锁定记录,就无法更新记录。
但是您可以调整您的锁定方案,以尽量减少锁定的影响。您可能需要在 50 个调用 pgmA 的程序中执行此操作。方法是在没有锁的情况下读取要更新的记录,进行处理,然后在更新之前再次读取它,这次有锁。这样,如果您的处理长时间运行(通常是用户输入),锁定时间就会最小化。
通常更新 id 存储在每条记录中,它只是一个序列号,以帮助检测在第一次和第二次读取记录之间另一个进程对记录所做的更改。检测这些变化的另一种方法是将记录存储在第一次读取的数据结构中,然后在更新之前将初始读取与第二次读取进行比较。
因此,通过 RLA 处理,它看起来像这样:
chain(n) (key:fields) file old;
if %found(file);
// process record
chain (key:fields) file new;
if %found(file);
if new <> old;
// record changed between reads - reprocess
else;
// apply changes to new
update record new;
endif;
else;
// record deleted between reads - reprocess
endif;
endif;
推荐阅读
- cassandra - 添加新节点后丢失 cassandra 身份验证用户
- python - 如何修复 ValueError:解包的值太多
- terraform - Create resources using Terraform Module with some resources shared by the modules
- python - 在 groupby 熊猫对象上应用 rolling() 时,多索引重复
- java - 使用 mysql jdbc 快速获取结果集
- azure - redis 的理想值大小范围是多少?100KB 是不是太大了?
- .net-core - 尽管已安装,但我的 VS2017 安装中缺少 .net core 2.2
- python - 警告 - 此实例的状态已在外部设置为成功。服用毒丸
- javascript - 如何在不重新加载的情况下使用 [routerLink] 和 target="_blank" 导航到内部页面?
- visual-studio - IDE 主题的通用样式编辑器