玩弄MongoDB和规范。网。

事把我弄糊涂-没有交易记录
(不能就这么告诉 MongoConnection.Begin/EndTransaction 或者类似的东西).

我想要使用工作单元模式和rollback变化的情况下,一些失败。

还有一个干净的方式如何丰富我的储存库将ITransaction?

有帮助吗?

解决方案

MongoDB的不支持复杂的多文件交易。如果这是你绝对需要它可能不是一个非常适合你。

在大多数情况下,然而,我们发现复杂的交易,不是必需的。 MongoDB中的所有操作都在一个单一的文件原子,我们支持不错更新修饰,该使很多操作,将需要一个交易容易实现(和快速)。

其他提示

这是真实的简化版,MongoDB的交易支持开箱即用,但你可以实现你自己的乐观事务。他们适合精细的工作单元。我写了一个Java示例和一些解释 GitHub的这样你就可以在C#中轻松地重复。

作为V4.0的,MongoDB的支持多文档ACID事务。通过快照隔离,交易提供数据的全球一致的看法,并实施全有或全无的执行,以保持数据的完整性。对于更多的信息,请参见 https://www.mongodb.com/transactions

在4.2,将MongoDB的也支持分片数据。

在此博客帖子,我也概述了我们的旅程多文档ACID事务中,如果你有兴趣在历史和我们的推理情况。

4.0的MongoDB将增加对多文件事务的支持。

https://www.mongodb.com/transactions

一些笔记记录。

同时MongoDB不会有事务的支持,它支持 原子性在一个单一的文件:

MongoDB并支持原子操作的内的一个单一的文件。鉴于提供的可能性嵌套文件,这一功能提供支持,对于大量的使用情况。

此外,该手册条约"隔离操作的顺序"可能是有趣的。E.g.:

然而,可以分离出一个写作的影响的多个文件使用的隔离操作员。

可以使用代替的MongoDB TokuMX。

http://www.tokutek.com/products/tokumx-for-mongodb /

  

TokuMXTM是一个开放源码,MongoDB的高性能分布相比基本MongoDB的具有显着改进的性能和操作效率。 TokuMX是一个简易替代MongoDB的,并提供20X的性能改进,在数据库大小减少90%,并支持与MVCC ACID事务。

FYI - 这已经改变

using (var session = mongoDbContext.MongoDatabase.Client.StartSession())
            {
                var itemAuthRepo = (Repository<ItemAuthorization, ObjectId>)mongoDbContext.ItemAuthorizations;
                var calendarRepo = (Repository<CalendarEvent, ObjectId>)mongoDbContext.Calendars;

                if (itemAuthRepo != null && calendarRepo!=null)
                {
                    session.StartTransaction();

                    try
                    {
                        itemAuthRepo.Collection.InsertOne(session, newItemAuthorization);
                        calendarRepo.Collection.InsertOne(session, cal);
                        session.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        session.AbortTransaction();
                        throw;
                    }
                }
                else
                {
                    throw new Exception("IRepository was not casted to Repository");
                }
            }

是的,有申请的MongoDB取决于数据库版本工作模式的单位多种方式。

直到MongoDB的4.0,存在对于多文档ACID事务的支持。然后开发者已经使用的“两阶段提交协议”(单个数据库)和“三阶段提交”(非阻塞上分布式数据库)来创建已设置的数据一致性其自己的事务层的但不全有或全无的执行,以保持数据的完整性。因此,这种方式已经撤下性能。

4.0的MongoDB已增加了对多文档ACID事务的支持。

来源:

https://en.wikipedia.org/wiki/Two-phase_commit_protocol

https://en.wikipedia.org/wiki/Three-phase_commit_protocol

https://www.mongodb.com/transactions

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top