标签: acid

数据库原子性一致性

原子性和一致性有什么区别?在我看来,两个人用不同的词说同样的话.

原子性

执行事务的所有任务或不执行任何任务.没有部分交易.例如,如果事务开始更新100行,但系统在20次更新后失败,则数据库将更改回滚到这20行.

一致性

事务将数据库从一个一致状态转换为另一个一致状态.例如,在借记储蓄账户并贷记支票账户的银行交易中,故障不得导致数据库仅贷记一个账户,这将导致数据不一致.

database acid

17
推荐指数
2
解决办法
8553
查看次数

不是在Django中嵌套@atomic()的版本?

来自原子()文档

原子块可以嵌套

这听起来像一个很棒的功能,但在我的用例中我想要相反:我希望只要装饰的块@atomic()成功保留,事务就会持久.

有没有办法确保django的交易处理的持久性?

背景

交易是ACID."D"代表耐久性.这就是为什么我认为交易不能在不丢失特征"D"的情况下嵌套.

示例:如果内部事务成功,但外部事务不成功,则外部事务和内部事务将回滚.结果:内部事务不耐用.

我使用PostgreSQL,但AFAIK这应该不重要.

python django postgresql transactions acid

15
推荐指数
4
解决办法
499
查看次数

分布式事务如何工作(例如MSDTC)?

我以一种模糊的方式理解常规ACID事务的工作原理.您在数据库上执行一些工作,以便在设置某种提交标志之前不确认工作.提交部分基于一些基本假设(如单个磁盘块写入是原子的).如果发生灾难性错误,您可以在恢复阶段清除未提交的数据.

分布式事务如何工作?在一些MS文档中,我已经读过你可以以某种方式在数据库和文件系统之间执行事务(以及其他事情).

这种技术可能(并且可能)用于安装程序,您希望程序完全安装或完全不存在.您只需在安装程序开始时开始一个事务.接下来,您可以连接到注册表和文件系统,进行定义安装的更改.作业完成后,如果由于某种原因安装失败,只需提交或回滚.这个神奇的分布式事务协调器会自动为您清理注册表和文件系统.

如何以这种方式处理两个不同的系统?在我看来,总是可以让系统处于不一致状态,文件系统已经提交了更改而注册表没有.我认为在MSDTC中甚至可以通过网络执行事务.

我已经阅读了http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx,但感觉只是解释的开头,而且第4步应该大大扩展.

编辑:从我在http://en.wikipedia.org/wiki/Distributed_transaction上收集的内容中,可以通过两阶段提交(http://en.wikipedia.org/wiki/Two-phase_commit)来完成.看完之后,我仍然没有理解100%的方法,似乎步骤之间有很多错误的余地.

transactions acid mstdc

13
推荐指数
1
解决办法
4109
查看次数

内存映射文件和单个块的原子写入

如果我使用普通IO API读取和写入单个文件,则保证写入是基于每个块的原子.也就是说,如果我的write只修改了一个块,那么操作系统会保证写入整个块,或者根本不写入.

如何在内存映射文件上实现相同的效果?

内存映射文件只是字节数组,所以如果我修改字节数组,操作系统无法知道何时我认为写"完成",所以它可能(即使不太可能)在内存中交换内存我的块写操作的中间,实际上我写了半个块.

我需要某种形式的"进入/离开临界区",或"钉住"文件的页面到内存中,而我写它的一些方法.这样的事情存在吗?如果是这样,那可移植到常见的POSIX系统和Windows吗?

mmap acid atomic fwrite

13
推荐指数
1
解决办法
3168
查看次数

非ACID RethinkDB或MongoDB如何为不相等的查询维护二级索引

这更像是"内部运作"未定问题:

noSQL数据库如何不支持*A*CID(意味着它们无法在单个事务中更新/插入然后回滚多个对象的数据) - 更新二级索引?

我的理解是 - 为了使二级索引保持同步(否则它将变得陈旧) - 这必须在同一事务中发生.

此外,如果索引可能驻留在与数据不同的主机上 - 那么需要存在分布式锁和/或两阶段提交以使这种更新原子地工作.

但是,如果这些数据库不支持多对象事务(这意味着它们不对多个主机上的数据进行两阶段提交),它们使用什么方法来保证驻留在B树结构中的二级索引与数据不陈旧?

indexing transactions acid mongodb rethinkdb

13
推荐指数
2
解决办法
3255
查看次数

NoSQL数据库无法处理的任务示例(如果有)

我想测试一下NoSQL世界.这只是好奇心,而不是绝对需要(尚未).我已经阅读了一些有关SQL和NoSQL数据库之间差异的信息.我确信潜在的优势,但我有点担心NoSQL不适用的情况.如果我理解NoSQL数据库本质上错过了ACID属性.

有人可以给出ACID关系数据库可以处理的一些真实世界操作(例如电子商务站点,或科学应用程序,或......)的示例,但NoSQL数据库可能会失败,无论是系统地某种类型竞争条件还是停电等?

如果没有修改数据库引擎,那么完美的例子就是没有任何解决方法.NoSQL数据库表现不佳的例子最终会成为另一个问题,但在这里我想看看理论上我们什么时候不能使用这种技术.

也许找到这样的例子是数据库特定的.如果是这种情况,那么让MongoDB代表NoSQL世界.

编辑:澄清这个问题我不想讨论哪种数据库对某些情况更好.我想知道在某些情况下这项技术是否绝对是一个绝对的死胡同,因为无论我们如何努力尝试某种类型的功能,SQL数据库提供的功能都无法在nosql商店之上实现.由于有许多nosql商店可用,我可以接受选择现有的nosql商店作为支持,但我最感兴趣的是商店应该提供的最小功能子集,以便能够实现更高级别的功能(比如可以使用不提供X的商店...).

rdbms acid mongodb nosql

12
推荐指数
3
解决办法
7914
查看次数

使用Mongoose和NodeJs,Express的Mongo DB 4.0交易

我正在开发一个应用程序,我在应用程序层使用MongoDB作为数据库和Nodejs + Express,我有两个集合,即

  1. 用户
  2. 交易

在这里,我必须更新成千上万用户的钱包,如果成功创建一个新文档,每个交易的相关信息,这是我的代码:

 userModel.update({_id : ObjectId(userId)}, {$inc : {wallet : 500}}, function (err, creditInfo) {
    if(err){
        console.log(err);                            
    }
    if(creditInfo.nModified > 0) {
        newTransModel = new transModel({
            usersId: ObjectId(userId),            
            amount: winAmt,         
            type: 'credit',           
        }); 
        newTransModel.save(function (err, doc) {
            if(err){
                Cb(err); 
            }
        });
    }                            
});
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案并不atomic总是有可能用金额更新用户钱包,但是在交易收集中没有创建相关交易导致经济损失.

我听说最近MongoDB已经添加Transactions了对它的支持4.0 version,我已经阅读了MongoDB文档但是无法用Node.js中的mongoose成功实现它,有人能告诉我如何使用TransactionsMongoDB 的最新功能重新实现上面的代码哪些有这些功能

Session.startTransaction()
Session.abortTransaction()
Session.commitTransaction()
Run Code Online (Sandbox Code Playgroud)

MongoDB文档:点击这里

transactions acid mongoose mongodb node.js

11
推荐指数
1
解决办法
1万
查看次数

实施ACID

我正在开始研究一个需要在其数据库上提供ACID语义的项目.

由于数据的性质,它不适合存储在常见的现成系统(关系或键值)中.

关于如何实现必须提供ACID语义的系统有哪些好的资源?

我的典型Google搜索会返回有关已提供ACID语义的系统的更多信息,而不是如何实现此类系统.

acid

9
推荐指数
1
解决办法
2868
查看次数

用于在数据库之外实现事务的模式

我必须发送电子邮件,写入文件,并呼叫Web服务.为了保持一致性,必须执行所有步骤.如果任何步骤抛出异常或错误,则必须回滚所有步骤.

在我开始编写自己的对象ACID引擎之前,是否有任何常用的模式在对象级别实现ACID语义?

更好的是,我可以使用任何现有的.NET平台库吗?

编辑:我知道发送电子邮件无法撤消,但无法连接到SMTP服务器导致终止整个事务.此外,我希望这可以扩展用于将来的操作.

.net transactions acid

9
推荐指数
1
解决办法
2484
查看次数

什么应用程序不需要ACID?

对于这个无知的问题很抱歉,但是什么样的应用程序不需要符合ACID标准的数据库服务器?我有一个SQL Server背景,其中ACID一直"在那里",现在研究其他DBMS让我思考.我能想到的大多数应用都需要原子性或隔离性.谢谢!

database acid rdbms-agnostic

9
推荐指数
3
解决办法
3288
查看次数