异步SQL操作

时间:2010-03-29 13:32:12

标签: sql asynchronous

我遇到了问题,我不确定如何最好地解决。

我有一个应用程序来更新数据库以响应临时请求。特别是一个请求很常见。请求是一个更新,它本身很简单,但有一些复杂的前提条件。

  • 对于此请求的业务层 首先从中请求一组数据 数据层。
  • 评估了业务逻辑层 来自数据库的数据和 来自请求的参数 这个要执行的动作是 确定了,请求的 响应消息已创建。
  • 业务层现在执行 实际更新命令即 请求的目的。

最后一步是问题,此命令取决于数据库的状态,该状态可能在业务逻辑运行后发生了变化。在数次往返数据库的过程中锁定此操作中读取的数据似乎也不是一个好主意。是否有“最佳实践”方法来完成这样的事情? 谢谢!

4 个答案:

答案 0 :(得分:2)

简单来说,当您执行更新命令时,您担心数据库可能已更改?

然后调用防御性写入的存储过程,并且只有在数据被调用时(通过检查外键引用,数据完整性等)数据处于可接受状态时才会更新。

如果我能帮助嘲笑某些方面,请告诉我。

答案 1 :(得分:2)

您可以存储已修改的业务对象的原始状态,并将原始对象与其数据库对应项进行比较,以检查是否有任何更改。

如果已进行了更改,则您可以选择基于原始,已修改和存储(数据库)对象合并对象,或者取消更新并告知客户端更新失败。

答案 2 :(得分:0)

这有点困难,因为问题中的细节不多,所以我只举一个简单的例子,说明你可以适用于你的情况。

加载所有数据以及上次更改的日期(yyyy-mm-dd hh:mi:ss.mmm)

SELECT AAA,BBB,LastChgDate FROM YourTable WHERE ID=xxxxxx

做你的业务逻辑

保存数据

UPDATE YourTable SET AAA=aaaaa,BBB=bbbbb WHERE ID=xxxxxx AND LastChgDate=zzzzzz

如果行计数!= 1,则其他人更改数据时出错,否则保存数据。

答案 3 :(得分:0)

使用正确的事务隔离模式并在单个数据库事务中执行所有操作(即,在步骤1中启动事务并在步骤3之后执行)。

你的问题有点模糊,但我猜你需要SNAPSHOT或READ COMMITTED模式。