Prévention des erreurs de clé
Stratégies de gestion proactive des clés
Prévenir les erreurs de clé est crucial pour maintenir l'intégrité des données et les performances de l'application dans MongoDB.
Techniques de prévention des clés
graph TD
A[Key Error Prevention] --> B[Unique Indexing]
A --> C[Validation Rules]
A --> D[Data Preprocessing]
A --> E[Concurrency Control]
1. Mise en œuvre de l'indexation unique
Création d'indexes uniques
## Create unique index on email field
db.users.createIndex(
{ "email": 1 },
{ unique: true }
)
## Compound unique index
db.users.createIndex(
{ "username": 1, "domain": 1 },
{ unique: true }
)
Comparaison des types d'index
Type d'index |
Unicité |
Performance |
Cas d'utilisation |
Unique simple |
stricte |
modérée |
Champ unique |
Unique composé |
complexe |
inférieure |
Plusieurs champs |
Unique partiel |
conditionnelle |
flexible |
Unicité sélective |
2. Techniques de validation des données
Validation de schéma
## Create collection with validation rules
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email", "username"],
properties: {
email: {
bsonType: "string",
pattern: "^.+@.+$"
},
username: {
bsonType: "string",
minLength: 3
}
}
}
}
})
3. Stratégies de prétraitement
graph TD
A[Data Preprocessing] --> B[Normalize Input]
A --> C[Trim Whitespace]
A --> D[Convert to Lowercase]
A --> E[Remove Special Characters]
Exemple de script de prétraitement
def preprocess_key(key):
## Normalize key before insertion
normalized_key = key.lower().strip()
normalized_key = re.sub(r'[^a-z0-9]', '', normalized_key)
return normalized_key
def insert_user(collection, username, email):
processed_username = preprocess_key(username)
try:
collection.insert_one({
"username": processed_username,
"email": email
})
except DuplicateKeyError:
print("User already exists")
4. Gestion de la concurrence
Opérations atomiques
## Use findOneAndUpdate for atomic operations
db.users.findOneAndUpdate(
{ "email": "[email protected]" },
{ $setOnInsert: { "username": "newuser" } },
{
upsert: true,
returnNewDocument: true
}
)
Bonnes pratiques de LabEx
- Mettre en œuvre une validation complète
- Utiliser stratégiquement les index uniques
- Normaliser les données d'entrée
- Gérer avec soin les opérations concurrentes
- Enregistrer et surveiller les événements liés aux clés
En adoptant ces mesures préventives, les développeurs peuvent réduire considérablement les erreurs liées aux clés et améliorer la fiabilité globale de la base de données.