0

画像に示すように、ファイル構造からデータを挿入しています。

フォルダー --> サブフォルダー --> サブフォルダー --> ファイル

以前は、このデータは SQL Server に格納されていました。このすべてのデータを SQL に挿入するのにかかる時間は 26 秒でしたが、MongoDB への同じデータの挿入には 2500 秒かかりました (手頃な価格ではありません)。

ファイルはxmlファイルです。フォルダ/サブフォルダの詳細は 1 つのテーブルに保存され、ファイルの詳細は別のテーブルに保存され、ファイル内の一部のタグは別のテーブルに保存されます。私のコードは再帰的にデータをチェックして保存します。

挿入操作は、4 つのコレクションに同時に挿入します (SQL 挿入時の 4 つのテーブルに類似)。

SQL 用に 1 つのサーバーを使用しているため、複数のサーバーを使用したくありません。また、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"

MongoDB の書き込み操作は、SQL に比べて高速であると予想されますが、それはわかりません。誰か助けてくれませんか?

4

1 に答える 1

0

私は非常にばかげている間違いを見つけました。アプリケーションをデバッグ モードで実行しています。exeを実行すると速くなりました。

于 2013-11-21T05:20:35.273 に答える