sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongo åbner for mange forbindelser

Du opretter en forekomst af Mongo-klassen for hver enkelt operation. Det virker ikke, da hver instans vil oprette og holde mindst én forbindelse (men som standard 10), og disse forbindelser vil kun blive fjernet, hvis Java GC'en rydder op i din Mongo-instans, eller når du kalder close().

Problemet er, at du i begge tilfælde opretter dem hurtigere, end de bliver lukket, selv ved at bruge en enkelt tråd. Dette vil udtømme det maksimale antal forbindelser i en fart. Den rigtige løsning er at holde en Mongo-instans omkring ved at bruge singleton-mønsteret (Mongo.Holder giver funktionalitet til dette, prøv Mongo.Holder.connect(..)). En hurtig "fix" er at øge fildeskriptorgrænsen på din maskine, så det maksimale antal forbindelser er betydeligt højere, men selvfølgelig kan du til sidst ramme den samme grænse. Du kan tjekke dit nuværende max ved hjælp af (in shell) :

db.serverStatus().connections

TL;DR :Behandl en Mongo-instans som en singleton og gør dem så langlivede som muligt, og du er gylden. Implementering af en MongoFactory med en statisk metode getInstance(), der returnerer en dovent oprettet instans, vil gøre tricket fint. Held og lykke.



  1. Mongodb Java-forespørgsel til datointerval

  2. Redis - Lua-tabeller som returværdier - hvorfor virker dette ikke

  3. C#-driver til MongoDb:hvordan bruger man limit+count?

  4. Opdater og returner dokument i Mongodb