sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Index Builds – Förhindrar användare från att utlösa nya byggnader

Indexbyggen på MongoDB-produktionskluster måste hanteras med största försiktighet. Vi har dokumenterat problemen i detalj i ett av  våra tidigare blogginlägg – The Perils of Building Indexes på MongoDB.

Beroende på storleken på dina data kan både förgrunds- och bakgrundsbyggnationer få ner ditt kluster. Så, hur förhindrar du att dina användare av misstag utlöser indexbyggen från MongoDB CLI? Det korta svaret är att du inte kan. Men vad du kan göra är att ta bort "CreateIndex"-privilegiet från de flesta av dina användare så att de inte av misstag kan utlösa ett indexbygge från CLI. Det bör finnas väldigt få användare i ditt system som har tillgång att skriva data till databasen. Bland dessa användare borde ännu färre ha tillstånd att bygga index. För en primer om hur man använder MongoDB-roller, se dokumentationen – Hantera användare och roller.

Det bästa alternativet för att implementera detta är att skapa din egen anpassade roll och ta bort "CreateIndex"-privilegiet för dina användare. Vi ville dock inte bygga listan med behörigheter för hand eftersom detta kommer att vara olika för varje sammanhang och eventuellt MongoDB-version. Vi satte ihop det här lilla skriptet för att använda en av de befintliga inbyggda rollerna och tog bort "CreateIndex"-privilegiet från den här rollen. I det här exemplet använder vi den inbyggda "readWrite"-rollen och tar bort "CreateIndex"-privilegiet från den här rollen:

var privs = db.getRole('readWrite',{ showPrivileges: true });
privs.privileges.forEach(function (item, index) {
  var index = item.actions.indexOf("createIndex");
  if (index !== -1) item.actions.splice(index, 1);
});
db.createRole({role:"readWriteNoIndex",privileges:privs.privileges,roles:[]});
  1. Spara innehållet i kodavsnittet som createRole.js.
  2. Kör skriptet med syntaxen nedan:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js

När rollen har skapats kan du använda den här rollen för att skapa användare framöver.

Fler tips till dig

Hur man skapar skiftlägesokänsliga index i MongoDB

Verkskiftsokänsliga index stöder frågor som utför strängjämförelser utan hänsyn till skiftläge. Sortering ger dig möjlighet att ange språkspecifika regler för strängjämförelse. Läs mer

Hur man stoppar ett runaway-indexbygge i MongoDB

Indexbyggen i MongoDB kan ha en negativ inverkan på tillgängligheten för ditt kluster. Om du startar ett förgrundsindexbygge på en stor samling kan ditt kluster inte svara tills indexbygget är klart. Läs mer

MongoDB Regex, Index &Performance

MongoDB stöder reguljära uttryck med operatorn $regex. Men dessa MongoDB regex-frågor har en nackdel, alla utom en typ av regex använder dåligt index och resulterar i prestandaproblem. Läs mer


  1. Övervakning av Percona Server för MongoDB - nyckelmått

  2. Gör om viktiga namnkonventioner?

  3. En introduktion till MongoDB Zone Basics

  4. Ställa in ett dynamiskt fält i Ohm / Redis