Distribuera läsningar globalt med hjälp av Azure Cosmos DB:s API för MongoDB

GÄLLER FÖR: MongoDB

Den här artikeln visar hur du globalt distribuerar läsåtgärder med Inställningar för Läsinställningar för MongoDB med hjälp av Azure Cosmos DB:s API för MongoDB.

Prerequisites

Om du inte har en Azure-prenumeration, skapa ett gratis konto innan du börjar.

Du kan använda Azure Cosmos DB-emulatorn för den här självstudien med en anslutningssträng på:

mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true

I den här snabbstartsartikeln finns anvisningar om hur du använder Azure-portalen för att konfigurera ett Azure Cosmos DB-konto med global distribution och sedan ansluta till det.

Klona exempelprogrammet

Öppna ett git-terminalfönster, till exempel git bash och cd till en arbetskatalog.

Kör följande kommandon för att klona exempellagringsplatsen. Baserat på din plattform av intresse använder du någon av följande exempellagringsplatser:

  1. .NET-exempelprogram
  2. NodeJS-exempelprogram
  3. Mongoose-exempelprogram
  4. Java-exempelprogram
  5. SpringBoot-exempelprogram
git clone <sample repo url>

Kör appen

Beroende på vilken plattform som används installerar du de paket som krävs och startar programmet. Om du vill installera beroenden följer du README som ingår i exempelprogrammets lagringsplats. I exempelprogrammet NodeJS använder du till exempel följande kommandon för att installera de paket som krävs och starta programmet.

cd mean
npm install
node index.js

Programmet försöker ansluta till en MongoDB-källa och misslyckas eftersom anslutningssträng är ogiltig. Följ stegen i README för att uppdatera anslutningssträng url. Uppdatera readFromRegion även till en läsregion i ditt Azure Cosmos DB-konto. Följande instruktioner kommer från NodeJS-exemplet:

* Next, substitute the `url`, `readFromRegion` in App.Config with your Azure Cosmos DB account's values. 

När du har följt dessa steg körs exempelprogrammet och genererar följande utdata:

connected!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromSecondaryfunc query completed!

Läsa med läsinställningsläge

MongoDB-protokollet innehåller följande lägen för läsinställningar som klienter kan använda:

  1. primary
  2. primaryPreferred
  3. secondary
  4. secondaryPreferred
  5. närmaste

Mer information om beteendet för var och en av dessa läspreferenslägen finns i den detaljerade dokumentationen om läspreferenser i MongoDB. I Azure Cosmos DB mappar primära till WRITE-regionen och sekundära kartor till READ-regionen.

Baserat på vanliga scenarier rekommenderar vi att du använder följande inställningar:

  1. Om läsningar med hög tillgänglighet och låg svarstid krävs använder du läget FÖR LÄSINSTÄLLNINGAR NÄRMASTE . Den här inställningen dirigerar läsåtgärderna till närmaste tillgängliga region. Observera att om den närmaste regionen är regionen WRITE dirigeras dessa åtgärder till den regionen.
  2. Om hög tillgänglighet och geo-distribution av läsningar krävs (svarstiden är inte en begränsning) använder du det primära föredragna eller sekundära föredragna läsinställningsläget. Den här inställningen dirigerar läsåtgärder till en tillgänglig WRITE- respektive READ-region. Om regionen inte är tillgänglig dirigeras begäranden till nästa tillgängliga region enligt beteendet för läsinställningar.

Följande kodfragment från exempelprogrammet visar hur du konfigurerar NÄRMASTE läsinställning i NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.NEAREST});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromNearestfunc query completed!");
  });

På samma sätt visar kodfragmentet nedan hur du konfigurerar SECONDARY_PREFERRED läsinställningar i NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.SECONDARY_PREFERRED});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromSecondaryPreferredfunc query completed!");
  });

Läsinställningen kan också anges genom att skicka readPreference som en parameter i anslutningssträng URI-alternativ:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017?ssl=true&replicaSet=globaldb&readPreference=nearest';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
  console.log("Connected correctly to server");

  const db = client.db(dbName);

  client.close();
});

Se motsvarande exempelprogramlagringsplatser för andra plattformar, till exempel .NET och Java.

Läsa med taggar

Förutom läget Läsinställningar tillåter MongoDB-protokollet att taggar används för att dirigera läsåtgärder. I Azure Cosmos DB:s API för MongoDB ingår taggen region som standard som en del av svaret isMaster :

"tags": {
         "region": "West US"
      }

Därför kan MongoClient använda taggen region tillsammans med regionnamnet för att dirigera läsåtgärder till specifika regioner. För Azure Cosmos DB-konton finns regionnamn i Azure Portal till vänster under Inställningar-Replikdata> globalt. Den här inställningen är användbar för att uppnå läsisolering – fall där klientprogrammet endast vill dirigera läsåtgärder till en viss region. Den här inställningen är perfekt för scenarier av typen icke-produktion/analys, som körs i bakgrunden och inte är produktionskritiska tjänster.

Följande kodfragment från exempelprogrammet visar hur du konfigurerar läsinställningar med taggar i NodeJS:

 var query = {};
  var readcoll = client.db('regionDB').collection('regionTest',{readPreference: new ReadPreference(ReadPreference.SECONDARY_PREFERRED, {"region": "West US"})});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromRegionfunc query completed!");
  });

Se motsvarande exempelprogramlagringsplatser för andra plattformar, till exempel .NET och Java.

I den här artikeln har du lärt dig hur du globalt distribuerar läsåtgärder med hjälp av läsinställningar med Azure Cosmos DB:s API för MongoDB.

Rensa resurser

Om du inte fortsätter att använda den här appen tar du bort alla resurser som skapats av den här artikeln i Azure Portal med följande steg:

  1. På den vänstra menyn i Azure-portalen klickar du på Resursgrupper och sedan på namnet på den resurs som du skapade.
  2. På resursgruppens sida klickar du på Ta bort, skriver namnet på resursen som ska tas bort i textrutan och klickar sedan på Ta bort.

Nästa steg