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

Genbruger MongoDB slettet plads?

Opdatering (marts 2015): Fra 3.0-udgivelsen er der flere lagermotorer tilgængelige i MongoDB. Dette svar gælder for MMAP-lagringsmotoren (stadig standard i MongoDB 3.0), svaret for andre motorer (WiredTiger for eksempel) er ganske anderledes og kan meget vel være indstillelig og justerbar. Derfor, hvis du bruger en anden motor, bedes du læse de relevante dokumenter for den pågældende storage-motor for at finde ud af, hvilke standarder og muligheder du har for genbrug af plads.

Med MMAP-lagringsmotoren, når dokumenter slettes, sættes den tilbageværende plads på en gratis liste. Men for at bruge pladsen skal der indsættes dokumenter af samme størrelse senere, og MongoDB bliver nødt til at finde en passende plads til det pågældende dokument inden for en bestemt tidsramme (når det først får timeout ved at se på listen, vil det bare tilføjes) ellers genbrug af pladsen kommer ikke til at ske ret ofte. Denne sletning udføres i datafilerne, så der sker ingen genindvinding af diskplads her - alt dette sker internt i de eksisterende datafiler.

Hvis du efterfølgende laver en reparation eller gensynkroniserer en sekundær fra bunden, omskrives datafilerne, og pladsen på disken vil blive genvundet (enhver udfyldning på dokumenter fjernes også). Det er her, du vil se den faktiske pladsgenvinding på disken. For andre handlinger (kompakt inkluderet) vil brugen på disken ikke ændre sig og kan endda stige.

Med 2.2+ kan du nu bruge kommandoen collMod og muligheden usePowersOf2Sizes for at gøre genbrug af slettet plads mere sandsynlig (bemærk, at dette er standard i 2.6+). Dette betyder, at den indledende pladsallokering for et dokument er en smule mindre effektiv (512 bytes for et 400 byte dokument f.eks.), men betyder, at når et nyt dokument indsættes, er det mere sandsynligt, at det kan genbruge den plads. Hvis du sletter (eller vokser og dermed flytter) dokumenter meget, så vil dette være mere effektivt på lang sigt.

For alle, der er interesseret, har en af ​​de personer, der har skrevet meget af lagringskoden (Mathias Stearn), en fantastisk præsentation om lagringsinternerne, som kan findes her




  1. Kort-Reducer ydeevne i MongoDb 2.2, 2.4 og 2.6

  2. send downstream besked til google ccs med node js

  3. Abonner på flere kanaler med samme tråd Jedis

  4. Skalerbar måde at logge sideanmodningsdata fra en PHP-applikation?