问题标签 [acid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
403 浏览

php - 死锁和超时会破坏 ACID 事务

我有像这样工作的事务应用程序:

然后在 increaseNumber() 里面我会有一个像这样的查询,这是唯一适用于这个表的函数:

一切都包含在事务中,但最近我一直在处理一些非常慢的查询,并且我的应用程序中有很多并发性,所以我无法确保查询是以特定顺序运行的。

死锁会导致 ACID 事务中断吗?我有一个添加某些内容的函数,然后是另一个删除它的函数,但是当我遇到死锁时,我发现数据完全不同步,就像忽略了事务一样。

这一定会发生还是有其他问题?

谢谢,多米尼克

0 投票
1 回答
180 浏览

django - 交易、API 和失败设计

我一直在开发一个需要记录信用卡交易的应用程序,该交易依赖于使用外部 API。在我的应用程序中,我有一个包含总金额的发票的概念,以及在信用卡成功付款后从总金额中扣除的交易。

这更像是一个独立于平台的问题,但我正在使用 Django、Python 和 MySQL。

我的问题主要围绕在处理外部 API 时使用事务以及如何设计软件来处理潜在故障。Django 和 MySQL 都支持事务,所以这本身不是问题,但假设以下场景:

  • 通过支付 API 提交的信用卡
  • 信用卡已成功处理
  • 然后,此响应将作为该发票上的付款记录到数据库中
  • 出于某种原因将付款保存到数据库时出错

你现在做什么?

如果不涉及 API 调用,答案将很明确,回滚数据库事务并引发错误。但是调用外部 API 会使事情变得复杂,因为这并不是真正回滚外部 API 调用的方法。

我很感兴趣是否有人遇到过这个问题(对于信用卡或类似类型的交易)以及他们如何解决这个问题,或者在这种情况下通常采用一些软件设计方法。

0 投票
10 回答
58566 浏览

sql - MongoDB 在 v4 之前不符合 ACID 的真正含义是什么?

我不是数据库专家,也没有正式的计算机科学背景,所以请多多包涵。我想知道如果您使用不符合ACID的 v4 之前的旧 MongoDB 版本,可能会发生哪些现实世界的负面事情。这适用于任何不符合 ACID 的数据库。

我知道 MongoDB 可以执行Atomic Operations,但它们不“支持传统的锁定和复杂事务”,主要是出于性能原因。我也了解数据库事务的重要性,以及当您的数据库用于银行时,并且您正在更新几条都需要同步的记录时,您希望事务恢复到初始状态(如果有)停电所以信用等于购买等。

但是当我开始谈论 MongoDB 时,我们这些不了解数据库实际实现方式的技术细节的人开始抛出如下语句:

MongoDB 比 MySQL 和 Postgres 快得多,但它“无法正确保存”的可能性很小,比如百万分之一。

“不会正确保存”部分指的是这种理解:如果在您向 MongoDB 写入的那一刻发生停电,则有可能获得特定记录(例如,您正在跟踪具有 10 个属性的文档中的页面浏览量每个),其中一个文档只保存了 5 个属性……这意味着随着时间的推移,您的浏览量计数器将“略微”关闭。你永远不会知道多少,你知道他们会 99.999% 正确,但不是 100%。这是因为,除非您专门将此作为mongodb 原子操作,否则不能保证该操作是原子的。

所以我的问题是,什么时候以及为什么 MongoDB 不能“正确保存”的正确解释是什么?它不满足 ACID 的哪些部分,在什么情况下,以及您如何知道 0.001% 的数据何时关闭?这不能以某种方式解决吗?如果不是,这似乎意味着您不应该users在 MongoDB 中存储诸如表之类的东西,因为记录可能不会保存。但是话又说回来,那 1/1,000,000 的用户可能只需要“尝试再次注册”,不是吗?

我只是在寻找一个关于何时/为什么会在像 MongoDB 这样的不符合 ACID 的数据库上发生负面事情的列表,理想情况下,如果有一个标准的解决方法(比如运行后台作业来清理数据,或者只使用 SQL 等) .

0 投票
3 回答
2793 浏览

database - 非 ACID 数据库合规性对现实世界有哪些影响?

具体来说,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,其中不丢失任何东西是至关重要的。有没有在银行交易处理等关键任务应用程序中使用 NoSQL 的示例?

0 投票
3 回答
1213 浏览

php - 将自动递增的主键插入另一个表的线程安全方法(以便以后可以加入)

似乎有两种方法,第一种是这样的:

然后,您可以在所有相关表中插入 $nextid 作为外键。

另一种方法使用最后插入 id:

这两个线程都是安全的吗?IE,如果我有两个 php 脚本同时运行两个 mysql 线程,并且它们同时插入到主表中,相关联的表会收到正确的主 id 外键还是会发生混淆或冲突?

谢谢。

0 投票
3 回答
447 浏览

rdbms - 每次提交时,典型的 ACID RDBMS 是否会同步到磁盘?

ACID 中的“D”表示“持久性”,维基百科将其定义为:“每个提交的事务都受到保护,免受断电/崩溃/错误的影响,并且不会被系统丢失,因此可以保证完成”。

但是,这意味着在报告成功之前,每个事务都必须同步到磁盘,而不仅仅是刷新。('flush'=发送到操作系统级别,'sync'=发送到物理磁盘盘片)。这将使得不可能实现高事务率的 RDBMS。

流行的 RDBMS 真的会同步每笔交易吗?

0 投票
2 回答
745 浏览

mongodb - 没有持久性(mongo)有哪些操作订购保证?

假设您有一个 ACID 数据库。如果没有关于操作顺序的明确保证,您仍然可以根据持久性推断顺序。

例如

  1. 我插入x数据库,语句返回
  2. 现在我插入y
  3. 由于耐用性保证,我知道x以前是耐用y的。

因此,如果发生崩溃,我要么有:

  1. 没有xy在数据库中
  2. 只要x
  3. xy。_

现在假设一个具有宽松持久性保证的数据库。例如,没有安全模式或 getlasterror 的 MongoDB。

我有什么保证在第二个操作变得持久之前第一个操作是持久的?
请指出我声称这一点的文档部分或适当的测试。
如果发生故障,我的数据库是否可以包含y但不包含x

编辑:
似乎默认(唯一?)存储机制是内存映射文件引擎。如果没有启用日志(现在默认启用),服务器崩溃似乎会导致不一致且无法修复的状态。我想答案就在日记里。

0 投票
1 回答
436 浏览

java - 多线程环境中的 ACID 问题

我有一个多线程 Java 应用程序,它在 MySQL 数据库上执行大量并行 CRUD 操作。如 MySQL 手册中所述,InnoDB 表结构应确保事务按照 ACID 原则执行。但我仍然有问题,因为有时更新会丢失。这是我使用的示例存储过程之一:

0 投票
3 回答
2093 浏览

java - 如何启用多线程/连接修改同一个mysql表?

我有一个运行 2 个线程的程序,每个线程都有自己的数据库 JDBC 连接,它们将访问/修改同一个数据库表 A,如下所示。表A只有2列(id,name),主键是id和name的组合。

2个线程可能会向表中插入相同的数据,我得到以下异常,

你知道我该如何解决这个问题吗?谢谢你。

问候,乔伊

0 投票
2 回答
111 浏览

c - 哪个开源数据库满足所有这些要求?

  1. 支持用于读取和写入数据库的 C API。

  2. 支持 ACID 交易功能。

  3. 如果数据库状态发生任何变化,支持发送通知。

最后,它应该是开源的。

有人可以建议一个支持上述所有这些功能的开源数据库。