【问题标题】:How are SQL Transactions and JavaScript Promises related?SQL 事务和 JavaScript Promise 有什么关系?
【发布时间】:2017-03-06 16:57:58
【问题描述】:

我最近了解到Promises,它似乎类似于 SQL 事务。

  • 交易全有或全无

  • Promise 是顺序回调

    它们是处理异步事件的同一概念的不同实现吗?

【问题讨论】:

标签: javascript sql asynchronous transactions promise


【解决方案1】:

Promises 是处理异步的一般概念。事务是更新多条记录时保证原子性的一种手段。

它们可能一起出现在某个库中,但它们不相关。如果您有一个具有异步 API 的事务性数据库,您可以一起看到它们。

【讨论】:

【解决方案2】:

意图:

Promise 提供了一个用于同步异步回调的高级接口

事务为执行相关的 SQL 语句提供高级接口

用例

当应用程序需要一个未来值时,它会按需构造 Promise 并等待它返回。

当数据库需要执行一系列数据操作时,就会构造一个事务

错误处理

如果promise引发异常,则返回异常并暂停future

如果事务引发异常,则会对挂起的事务执行回滚

变异

如果没有异常,则在future对象中返回计算值。

如果没有异常,则提交事务的最终结果集

副作用

在事务块中,您可以将查询写入多个数据库,但您必须先将事务提交或回滚到一个数据库,然后才能将查询写入另一个数据库。

将来,您可以为一个或多个全局或非局部变量赋值;没有提交或回滚

污染

在并发 SQL 事务执行期间可能会发生读取。可能的读取操作包括:

  • 脏读,第二个 SQL 事务在第一个 SQL 事务执行 COMMIT 之前读取一行
  • 不可重复读取,其中一个 SQL 事务读取一行,然后第二个 SQL 事务修改或删除该行并执行 COMMIT;
  • 幻象,其中一个 SQL 事务读取满足搜索条件的行,然后第二个 SQL 事务生成至少一个满足第一个事务的搜索条件的行,然后第一个事务重复搜索,从而产生不同的结果集.

在未来执行期间可能会发生分配或序列化,而不会发出警告

状态管理

设置保存点可让您回滚事务的某些部分。例如,如果您的事务包括插入、更新和删除,并且您在更新后设置了保存点,则可以回滚事务以排除删除。

未来没有保存点

参考文献

cftransaction
Understanding the Available Transaction Isolation Levels
Asynchronous Programming in JavaScript with Promises
How Transactional Replication Works
Transaction Process Synchronization
Optimistic Algorithm
Concurrency Control Algorithms
Configuring Serializable Isolation
Improving concurrency with new registry variables
Operating Systems Lecture Notes: Allocation and Deadlock
SQLite File I/O Specification
Broken promises–C++0x futures
concurrent.futures — Launching parallel tasks
Javascript Is Awesome: I don't want promises
JavaScript Asynchronous Architectures: Events vs. Promises
AS3 Promises - a guide and example
Smalltalk Concurrency, Playing With Futures
promise-streams
System.Threading.TTask.Future
Promises Part 5: The Lego Problem
Callbacks vs Events
Events and Callbacks
Events vs. Callbacks – when to use what
coroutines,callbacks,message-queues - Tcl
Introduction to ES6 Promises – The Four Functions You Need To Avoid Callback Hell
All about ES6 Generators
Chaining Difference in ES6 Promisies and PEP3148 Futures

【讨论】:

  • “参考”部分太大了。这些链接中的每一个都应该证明一个陈述吗?然后使用脚注。
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2012-08-27
相关资源
最近更新 更多