与SQL Server插入操作相比,MongoDB(C#)插入操作需要更多时间(1000倍以上)

时间:2013-09-30 11:12:58

标签: c# mongodb

我正在从文件结构中插入数据,如图所示。

文件夹 - >子文件夹 - >子文件夹 - >文件

以前,此数据存储在SQL Server中。 将所有这些数据插入SQL所需的时间需要26秒,而插入MongoDB的相同数据需要2500秒(不能负担得起)。

该文件是一个xml文件。文件夹/子文件夹详细信息存储在一个表中,文件详细信息存储在另一个表中,文件中的某些标记存储在另一个表中。 我的代码以递归方式检查和存储数据。

插入操作同时插入4个集合(类似于SQL插入期间的4个表)。

我不想使用多个服务器,因为我使用一台服务器用于SQL。除了MongoDbs _id字段索引(隐式)

之外,我也没有明确地做任何索引

请找到以下代码 -

在SQL中:

public int AddRowToFolder(string fRelativePosition,
        string flabel, string fPhysicalName, int fParentId, int fViewOrder, EntityState fViewState,
        EntityProtection fProtection)
    {
       //Increment the Folder row count by 1.
        folderRowCount++;
        try
        {
            folderDataRow = folderDataSet.Tables[0].NewRow();

            //Adding the values to the Folder Dataset.

            folderDataRow[Convert.ToInt32(FolderColumns.RelativePosition)] = fRelativePosition;
            folderDataRow[Convert.ToInt32(FolderColumns.Label)] = flabel;
            folderDataRow[Convert.ToInt32(FolderColumns.PhysicalName)] = fPhysicalName;
            folderDataRow[Convert.ToInt32(FolderColumns.ParentId)] = fParentId;
            folderDataRow[Convert.ToInt32(FolderColumns.ViewOrder)] = fViewOrder;
            folderDataRow[Convert.ToInt32(FolderColumns.ViewState)] = fViewState;
            folderDataRow[Convert.ToInt32(FolderColumns.Protection)] = fProtection;

            folderDataSet.Tables[0].Rows.Add(folderDataRow);                
        }

        return folderRowCount;
    }

在MongoDB中:

public int AddRowToFolder(string fRelativePosition,
        string flabel, string fPhysicalName, int fParentId, int fViewOrder, EntityState fViewState,
        EntityProtection fProtection)
    {
       //Increment the Folder row count by 1.
        folderRowCount++;
        try
        {
            BsonDocument doc = new BsonDocument();

            //Adding the values to the Folder Dataset.

            doc.Add(FolderColumns.RelativePosition.ToString() , fRelativePosition);
            doc.Add((FolderColumns.Label).ToString(), flabel);
            doc.Add((FolderColumns.PhysicalName).ToString(), fPhysicalName);
            doc.Add((FolderColumns.ParentId).ToString(), fParentId);
            doc.Add((FolderColumns.ViewOrder).ToString(),fViewOrder);
            doc.Add((FolderColumns.ViewState).ToString(),fViewState);
            doc.Add((FolderColumns.Protection).ToString(), fProtection);

            foldersCollection.Insert(doc, WriteConcern.Unacknowledged);
        }

        return folderRowCount;
    }

我使用的连接字符串是:

DbConnString = "mongodb://localhost"

与SQL相比,MongoDB写操作预计会更快,但我没有看到。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我发现我的错误非常愚蠢。我在调试模式下运行我的应用程序。当我执行exe时它更快。