MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Index Builds – Verhindern, dass Benutzer neue Builds auslösen

Indexaufbauten auf MongoDB-Produktionsclustern müssen mit größter Sorgfalt behandelt werden. Wir haben die Probleme in einem unserer vorherigen Blogposts – The Perils of Building Indexes on MongoDB – ausführlich dokumentiert.

Abhängig von der Größe Ihrer Daten können sowohl Vordergrund- als auch Hintergrundaufbauten Ihren Cluster zum Absturz bringen. Wie verhindern Sie also, dass Ihre Benutzer versehentlich Indexerstellungen über die MongoDB-Befehlszeilenschnittstelle auslösen? Die kurze Antwort ist, dass Sie es nicht können. Was Sie jedoch tun können, ist, den meisten Ihrer Benutzer die Berechtigung „CreateIndex“ zu entziehen, damit sie nicht versehentlich eine Indexerstellung über die CLI auslösen können. Es sollte nur sehr wenige Benutzer in Ihrem System geben, die Zugriff haben, um Daten in die Datenbank zu schreiben. Unter diesen Benutzern sollten noch weniger Benutzer die Berechtigung zum Erstellen von Indizes haben. Eine Einführung in die Verwendung von MongoDB-Rollen finden Sie in der Dokumentation – Benutzer und Rollen verwalten.

Die beste Möglichkeit, dies zu implementieren, besteht darin, Ihre eigene benutzerdefinierte Rolle zu erstellen und das Privileg „CreateIndex“ für Ihre Benutzer zu entfernen. Wir wollten die Liste der Berechtigungen jedoch nicht von Hand erstellen, da diese für jeden Kontext und möglicherweise jede MongoDB-Version unterschiedlich sein wird. Wir haben dieses kleine Skript zusammengestellt, um eine der vorhandenen integrierten Rollen zu verwenden, und das Privileg „CreateIndex“ von dieser Rolle entfernt. In diesem Beispiel verwenden wir die integrierte „readWrite“-Rolle und entfernen das „CreateIndex“-Privileg von dieser Rolle:

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. Speichern Sie den Inhalt des Codeausschnitts als createRole.js.
  2. Führen Sie das Skript mit der folgenden Syntax aus:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js

Sobald die Rolle erstellt wurde, können Sie diese Rolle verwenden, um in Zukunft Benutzer zu erstellen.

Weitere Tipps für Sie

So erstellen Sie Indizes ohne Berücksichtigung der Groß-/Kleinschreibung in MongoDB

Indizes ohne Berücksichtigung der Groß-/Kleinschreibung unterstützen Abfragen, die Zeichenfolgenvergleiche ohne Berücksichtigung der Groß-/Kleinschreibung durchführen. Die Sortierung gibt Ihnen die Möglichkeit, sprachspezifische Regeln für den Zeichenfolgenvergleich anzugeben. Weitere Informationen

Wie man einen außer Kontrolle geratenen Indexaufbau in MongoDB stoppt

Indexaufbauten in MongoDB können sich nachteilig auf die Verfügbarkeit Ihres Clusters auswirken. Wenn Sie eine Indexerstellung im Vordergrund für eine große Sammlung auslösen, reagiert Ihr Cluster möglicherweise nicht, bis die Indexerstellung abgeschlossen ist. Weitere Informationen

MongoDB Regex, Index und Leistung

MongoDB unterstützt reguläre Ausdrücke mit dem $regex-Operator. Diese MongoDB-Regex-Abfragen haben jedoch einen Nachteil:Alle bis auf einen Regex-Typ nutzen Indexe schlecht aus und führen zu Leistungsproblemen. Weitere Informationen