画像に示すように、ファイル構造からデータを挿入しています。
フォルダー --> サブフォルダー --> サブフォルダー --> ファイル
以前は、このデータは 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 に比べて高速であると予想されますが、それはわかりません。誰か助けてくれませんか?