小编Met*_*eny的帖子

MongoDB的存储库模式-一项事务可处理多个工作单元

我正在使用“存储库+工作单元”模式在C#Mongo DB驱动程序的顶部实现DAL抽象层。我当前的设计是每个工作实例实例都将打开(和关闭)新的Mongo DB会话。问题是Mongo DB仅允许会话和事务之间的1:1比率,因此在同一.NET事务下无法进行多个工作单元。

当前的实现是:

public class MongoUnitOfWork
{
    private IClientSessionHandle _sessionHandle;

    public MongoUnitOfWork(MongoClient mongoClient)
    {
       _sessionHandle = mongoClient.StartSession();
    }

    public void Dispose()
    {
       if (_sessionHandle != null)
       {
          // Must commit transaction, since the session is closing
          if (Transaction.Current != null)
            _sessionHandle.CommitTransaction();
          _sessionHandle.Dispose();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,以下代码将不起作用。第一批数据将提前提交:

using (var transactionScope = new TransactionScope())
{
    using (var unitOfWork = CreateUnitOfWork())
    {
       //... insert items

       unitOfWork.SaveChanges();
    }  // Mongo DB unit of work implementation will commit the changes when disposed

    // …
Run Code Online (Sandbox Code Playgroud)

c# transactions unit-of-work repository-pattern mongodb

8
推荐指数
1
解决办法
516
查看次数

Mongo DB-独立副本集和1节点副本集之间的区别

我需要使用Mongo DB事务,最近我了解到事务不适用于Mongo独立模式,而仅适用于副本集(带有C#的Mongo DB-与事务无关地添加文档)。
另外,我读到不建议将独立模式用于生产。

因此,我发现只需在mongod.cfg中定义一个副本集名称就足以将Mongo DB作为副本集而不是独立运行。
更改之后,Mongo事务开始工作。
但是,虽然我并没有真正使用复制功能,但将其用作副本集感到有些奇怪,并且我想确保使用的是有效配置。

所以我的问题是:

  1. 假设我真的不需要复制,负载平衡或任何其他可伸缩功能,将Mongo作为1节点副本集运行是否有任何问题/缺点?(如前所述,我需要它来允许交易)
  2. 以独立方式运行与以1节点副本集方式运行之间的功能和性能差异(如果有)?
  3. 我读过不建议将独立模式用于生产,尽管听起来它是最基本的配置。我知道大多数情况下都不会使用此配置,但是有时您可能希望将其用作本地计算机上的标准数据库。那么为什么不建议使用独立模式?它不够稳定,还是其他原因?

mongodb replicaset mongodb-replica-set

5
推荐指数
2
解决办法
637
查看次数