sql >> Database >  >> NoSQL >> MongoDB

Gebruik Mongosniff om te verduidelijken wat uw MongoDB hoort en zegt

Het schrijven van een applicatie bovenop het framework bovenop de driver bovenop de database lijkt een beetje op een spelletje aan de telefoon:je zegt "vul foo in", en de database zegt "vaatwasser met paarse apen".
Met Mongosniff kunt u precies zien wat de database hoort en zegt.
Het wordt geleverd met een binaire distributie, dus als je een mongod hebt, zou je mongosniff moeten hebben.

Om dit te proberen, voert u eerst de mongod-instantie uit zoals gewoonlijk:

$ ./mongod

Wanneer u mongosniff uitvoert, moet u het vertellen om naar de loopback-interface (localhost) te luisteren. Deze interface wordt meestal "lo" genoemd, maar mijn Mac noemt het "lo0", dus voer ifconfig uit om er zeker van te zijn dat je het de juiste naam geeft. Voer het nu uit:

$ sudo ./mongosniff --source NET lo
sniffing... 27017

Opmerking "sudo":dit werkte nooit voor mij vanuit mijn gebruikersaccount, waarschijnlijk vanwege een aantal domme netwerkrechten.

Voer nu de Mongo-shell uit en probeer iets in te voegen:

db.foo.insert({x:1})

Als je naar de uitvoer van mongosniff kijkt, zie je:

127.0.0.1:57856 -->> 127.0.0.1:27017 test.foo 62 bytes id:430131ca 1124151754
insert: { _id: ObjectId('4c7fb007b5d697849addc650'), x: 1.0 }
127.0.0.1:57856 -->> 127.0.0.1:27017 test.$cmd 76 bytes id:430131cb 1124151755
query: { getlasterror: 1.0, w: 1.0 } ntoreturn: -1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:57856 76 bytes id:474447bf 1195657151 - 1124151755
reply n:1 cursorId: 0
{ err: null, n: 0, wtime: 0, ok: 1.0 }

Er zijn drie verzoeken, allemaal voor één ellendig inlegvel. Door het eerste verzoek te verwijderen, kunnen we erachter komen:

bron –>>
plaats van bestemming

Onze klant,
In dit geval werkt mongo via poort 57856 en stuurde een bericht naar de database (127.0.0.1:27017).
dB
collectie

Deze zoekopdracht is voor de "foo" -verzameling van de "test" -database.
Bytelengte

De verzoeklengte is 62 bytes. Dit kan handig zijn als uw verzoeken de maximale lengte van het verzoek (16 MB) naderen.

id:
hexadecimaal
identificatie

Dit is de aanvraag-ID in hexadecimale en decimale vorm (uiteraard voor het geval u geen computer heeft). Elke zoekopdracht naar de database heeft een unieke identificatie die eraan is gekoppeld voor belastingdoeleinden.
op :
inhoud .

Dit is de feitelijke inhoud van het verzoek:we voegen dit document in. Merk op dat het een drijvende-kommawaarde van 1.0 invoegt, hoewel we 1 in de shell hebben ingevoerd. Dit komt omdat JavaScript slechts één nummertype heeft, dus elk nummer dat in de shell wordt ingevoerd, wordt geconverteerd naar een dubbel.
Het volgende verzoek in de uitvoer van mongosniff is het database-commando:het controleert of de invoeging succesvol is (de shell voert altijd veilige invoegingen uit).

Het laatst gehoorde bericht is iets anders:het gaat van database naar shell. Dit is het database-antwoord op de opdracht getlasterror. Het laat zien dat er slechts één document is geretourneerd (antwoord n:1) en dat er geen resultaten meer wachten in de database (cursorId:0). Als dit een "echte" zoekopdracht was en er nog een pakket met resultaten moest worden verzonden vanuit de database, zou cursorId niet nul zijn.

MongoDB in 30 minuten


  1. Future of Hadoop - Salarissen en baanvoorspellingen in big data-analyse

  2. Misbruik cURL om te communiceren met Redis

  3. Redis failover met StackExchange / Sentinel van C#

  4. Redis-ondersteuning op secundaire index