簡體   English   中英

從 C# MongoDb 啟用分片

[英]Enable sharding from C# MongoDb

我正在使用帶有最新 C# 驅動程序的 Mongo 4。 我的應用程序動態創建 DB 和 Collections,我想啟用分片。 我正在使用以下代碼:

if (!ShardingEnabled) return;
var database = collection.Database;
var databaseName = database.DatabaseNamespace.DatabaseName;
var collectionName = collection.CollectionNamespace.CollectionName;
var shardDbScript = $"{{ enableSharding: \"{databaseName}\" }}";
var shardDbResult = database.RunCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument() {        
    { "eval",shardDbScript }
});
var adminDb = Client.GetDatabase("admin");
var shardScript = $"{{shardCollection: \"{databaseName}.{collectionName}\"}}";
var commandDoc = new BsonDocumentCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument() {
    { "eval",shardScript }
});
var response = adminDb.RunCommand(commandDoc);

我從 mongo 得到一個“好的”響應,但我的數據庫沒有分片。 Output 來自 sh.status()

{  
    "_id" : "uat_Test_0",  
    "primary" : "SynoviaShard2",  
    "partitioned" : false,  
    "version" : { 
        "uuid" : UUID("69576c3b-817c-4853-bb02-ea0a8e9813a4"),  
        "lastMod" : 1 
    }
}

如何從 C# 中啟用分片?

我想到了。 這就是你如何從 c# 分片數據庫及其 collections,注意,分片鍵索引必須已經存在:

if (!ShardingEnabled) return;
var database = collection.Database;
var adminDb = Client.GetDatabase("admin");
var configDb = Client.GetDatabase("config");
//var dbs = Client.ListDatabaseNames().ToList();
var databaseName = database.DatabaseNamespace.DatabaseName;
var collectionName = collection.CollectionNamespace.CollectionName;
var shardDbResult = adminDb.RunCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument() {
    { "enableSharding",$"{databaseName}" }
});
var shardScript = $"{{shardCollection: \"{databaseName}.{collectionName}\"}}";
var commandDict = new Dictionary<string,object>();
commandDict.Add("shardCollection", $"{databaseName}.{collectionName}");
commandDict.Add("key",new Dictionary<string,object>(){{"_id","hashed"}});
var bsonDocument = new MongoDB.Bson.BsonDocument(commandDict);
var commandDoc = new BsonDocumentCommand<MongoDB.Bson.BsonDocument>(bsonDocument);
var response = adminDb.RunCommand(commandDoc);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM