sql >> Database >  >> NoSQL >> MongoDB

MongoDB-shardverzameling wordt niet opnieuw in evenwicht gebracht

Als je in MongoDB naar een shard-systeem gaat en je ziet geen evenwicht, kan dit een van de verschillende dingen zijn.

  1. Mogelijk hebt u niet genoeg gegevens om balancering te activeren. Dat was zeker niet jouw situatie, maar sommige mensen realiseren zich misschien niet dat met de standaard chunk-grootte van 64 MB het een tijdje kan duren om gegevens in te voegen voordat er genoeg is om een ​​deel ervan te splitsen en in evenwicht te brengen met andere chunks.

  2. De balancer is mogelijk niet actief geweest - aangezien uw andere verzamelingen in evenwicht werden gebracht, was dat in uw geval onwaarschijnlijk, tenzij deze verzameling als laatste werd verwijderd nadat de balancer om de een of andere reden was gestopt.

  3. De chunks in je verzameling kunnen niet worden verplaatst. Dit kan gebeuren wanneer de Shard-sleutel niet gedetailleerd genoeg is om de gegevens in kleine stukjes te splitsen. Het bleek dat dit jouw geval was, omdat je Shard-sleutel niet gedetailleerd genoeg bleek te zijn voor deze grote verzameling - je hebt 105 chunks (wat waarschijnlijk overeenkomt met het aantal unieke job_id-waarden) en meer dan 30 GB aan gegevens. Als de brokken te groot zijn en de balancer ze niet kan verplaatsen, worden ze gemarkeerd als "jumbo" (zodat hij niet ronddraait om ze te migreren).

Hoe te herstellen van een slechte keuze van een Shard-sleutel? Normaal gesproken is het erg pijnlijk om de Shard-sleutel te wijzigen - aangezien de Shard-sleutel onveranderlijk is, moet u een equivalent van een volledige gegevensmigratie uitvoeren om deze in een verzameling te krijgen met een andere Shard-sleutel. In uw geval bevindt de verzameling zich echter nog steeds op één scherf, dus het zou relatief eenvoudig moeten zijn om de verzameling te "ontsleutelen" en opnieuw te versleutelen met een nieuwe scherfsleutel. Omdat het aantal job_id's relatief klein is, raad ik aan om een ​​normale index te gebruiken om op job_id,customer_code te sharden, aangezien u daar waarschijnlijk een query op uitvoert en ik vermoed dat het altijd is ingesteld op het moment dat het document wordt gemaakt.




  1. Update meerdere documenten per id-set. Mangoest

  2. Hoe Mongodb-velden bij te werken met weglatingsvlag in Golang-structuur

  3. mongodb multi vasthoudendheid spel met @Document

  4. Een gebruiker maken in MongoDB v3.0.5