我刚刚阅读有关RDBMS的内容,而RDBMS的一个属性是原子性.因此,如果从账户中提取资金并转移到另一个账户,则交易将完全发生或根本不发生.没有部分交易.但实际上如何确保?
上述场景的SQL查询可能看起来像(i)UPDATE accountsset balance = balance - amount WHERE ac_num = 101(ii)UPDATE accountsset balance = balance + amount WHERE ac_num = 102
这绝不是确保原子性的.那么它究竟是如何发生的呢?
有免费的便携式(Windows,GNU/Linux和MacOSX)库提供无锁原子交换功能吗?
如果没有,它将如何实现这些平台?(x86与VC++或g ++)
谢谢
我们有一些旧的应用程序通过基于目录的队列进行通信.队列中的每个项目都是一个文件,并且有一个头文件,用于维护队列中项目的文件名的有序列表.
当然,这个旧代码需要在推送和弹出项目时锁定队列.假设mkdir()是一个原子操作,它正在创建一个lock子目录 - 如果多个进程尝试创建一个目录,那么其中只有一个会成功.
我的一位同事一直试图追查一个不起眼的问题,他认为原因是这个锁定不再有效,当进程在不同的机器上运行时,以及当有问题的文件系统安装在SAN上时.
他有可能是正确的吗?
我们在Jenkins服务器上运行每晚构建,并使用ClearCase作为源控制管理.
由于ClearCase是以文件为中心的,因此文件签入逐个操作.与SVN或Git(以存储库为中心)相反,开发人员的修改不是原子地提交的.
这在夜间没有问题,因为开发人员不再活动,ClearCase服务器在凌晨1点锁定.
但是这里有一个例子,当开发人员白天活跃时可能会引起关注(假设每半小时运行一次):
10:55 AM - Developer1 checks in element1
10:55 AM - Developer1 checks in element2
10:56 AM - Developer1 checks in element3
11:00 AM - ### Jenkins runs BUILD #1 ### <-- succeeds
11:29 AM - Developer2 checks in element1
11:29 AM - Developer2 checks in element2
11:30 AM - ### Jenkins runs BUILD #2 ### <-- fails (element3 is missing)
11:29 AM - Developer2 checks in element3
Run Code Online (Sandbox Code Playgroud)
因此,版本构建(又名"ASAP构建"或字面意思是"持续集成")值得考虑使用ClearCase还是我们谴责永远满足于夜间构建?
version-control continuous-integration clearcase atomicity jenkins
在一个Mysql数据库中,每个基于InnoDB的表都启用了自动提交,子查询和/或连接的查询是原子的吗?
例子:
INSERT INTO users SELECT (x,y,z) FROM users, comments WHERE users.id = comments.user_id; (连接)
UPDATE users, comments SET users.x = x1 WHERE users.age > 30; (连接)
UPDATE users, comments SET users.x = x1, comments.y = y1 WHERE users.age > 30; (连接)
UPDATE users, comments SET users.x = x1, comments.y = y1 WHERE users.id IN (SELECT id FROM users WHERE age > 30); (子查询)
该卡珊德拉2.0文档包含原子性的以下内容:
例如,如果使用复制因子为3的写入一致性级别QUORUM,Cassandra会将写入复制到群集中的所有节点,并等待来自两个节点的确认.如果在其中一个节点上写入失败但在另一个节点上成功,则Cassandra报告无法复制该节点上的写入.但是,在另一个节点上成功的复制写入不会自动回滚.
因此,写请求被发送到3个节点,我们正在等待2个ACK.假设我们只收到1个ACK(超时前).所以很清楚,如果我们以一致性ONE读取,我们可以读取该值,好的.
但以下哪一项陈述也属实:
好吧,所以我有一个Spring应用程序,它接受网络表示并启动虚拟机来表示传入的网络.
它使用低级API来调出VM,不涉及数据库.
我需要弄清楚如何处理用户提交10个节点(或任意数量)网络模型并且应用程序通过并构建网络(启动VM)的情况,如果节点无法启动我想要能够对此做出反应.我希望能够回滚我的更改(即销毁所有已创建的节点).
我被告知我需要查看"事务",但我不确定当我不使用数据库时是否适用于这种情况.
作为旁注,如果用户发送该请求,我确实有逻辑来取消节点.
我的问题是 - 我该如何处理?
此外,这是这个问题的最佳堆栈溢出吗?
正如标题所说,在可读/写操作中被认为是可以为空的布尔(bool?)?我通过C#文档搜索无济于事.我知道只有某些原始类型在执行读/写操作时保证原子性,而Bool是这些类型中的一种.当然,可空的布尔是一个不同的故事; 毕竟他们是对象所以我会说不,但......有人可以对这个问题有所了解吗?
两阶段提交被称为“原子提交协议”。我希望这意味着所有客户从事务提交之前或提交之后都可以看到世界的状态,而没有中间状态。似乎它可以进入一种状态,其中事务已部分提交,客户看到不一致的数据,从而破坏了原子性。
考虑两个数据库A和B的情况。如果在提交阶段A提交之后但B提交之前存在分区,则事务将部分提交。查询A和B的用户将看不到一致的数据-事务已在A上提交,但B具有来自提交之前的数据。
ACID的“一致”部分似乎也已损坏-查询A和B的客户端可能会看到违反业务规则的数据。
我的想法是,当分区结束并且事务管理器指示B提交时,系统最终将能够从中恢复。但是,与此同时,系统处于不一致的“部分提交”状态。难道不是要防止这种情况的全部原因吗?通过恢复时间一致性,损坏可能已经造成。
当两阶段提交被称为原子时,指的是什么属性?
关于内存命令的cppreference文档说
放宽内存排序的典型用法是递增计数器,例如std :: shared_ptr的引用计数器,因为这只需要原子性,但不需要排序或同步(请注意,递减shared_ptr计数器需要与析构函数进行获取 - 释放同步)
这是否意味着宽松的内存排序实际上不会导致相同变量的原子性?但更确切地说,结果是与其他放松的内存负载和/或compare_exchanges相关的最终一致性?使用std::memory_order_seq_cst是与配对时看到一致结果的唯一方法std::memory_order_relaxed吗?
我假设std::memory_order_relaxed对于相同的变量仍然是原子的,但是没有提供关于其他数据的加载和存储的任何其他约束.