MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Użyj Mongosniff, aby wyjaśnić, co słyszy i mówi Twoja baza danych

​​

Pisanie aplikacji na górze struktury na sterowniku i bazie danych jest trochę jak gra na telefonie:mówisz „wstaw foo”, a baza danych mówi „zmywarka z fioletowymi małpami”.
Mongosniff pozwala dokładnie zobaczyć, co słyszy i mówi baza danych.
Jest dostarczany z dystrybucją binarną, więc jeśli masz mongod, powinieneś mieć mongosniff.

Aby tego spróbować, najpierw uruchom instancję mongod jak zwykle:

$ ./mongod

Kiedy uruchamiasz mongosniff, musisz powiedzieć mu, aby nasłuchiwał interfejsu pętli zwrotnej (localhost). Ten interfejs jest zwykle nazywany „lo”, ale mój Mac nazywa go „lo0”, więc uruchom ifconfig, aby upewnić się, że nadajesz mu właściwą nazwę. Teraz uruchom go:

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

Uwaga „sudo”:to nigdy nie działało dla mnie z mojego konta użytkownika, prawdopodobnie z powodu niektórych głupich uprawnień sieciowych.

Teraz uruchom powłokę Mongo i spróbuj coś wstawić:

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

Jeśli spojrzysz na wyjście mongosniff, zobaczysz:

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 }

Są trzy prośby, wszystkie o jedną nieszczęsną wstawkę. Wycinając pierwsze żądanie, możemy dowiedzieć się:

źródło –>>
miejsce docelowe

Nasz Klient,
W tym przypadku mongo działa przez port 57856 i wysyła wiadomość do bazy danych (127.0.0.1:27017).
dB
kolekcja

To zapytanie dotyczy kolekcji „foo” bazy danych „test”.
Długość w bajtach

Długość żądania to 62 bajty. Może to być wygodne, jeśli Twoje żądania są bliskie maksymalnej długości żądania (16 MB).

identyfikator:
szesnastkowy
identyfikator

Jest to identyfikator żądania w postaci szesnastkowej i dziesiętnej (oczywiście w przypadku, gdy nie masz komputera). Każde zapytanie do bazy danych ma przypisany unikalny identyfikator do celów podatkowych.
op:
treść.

To jest rzeczywista treść wniosku:wstawiamy ten dokument. Pamiętaj, że wstawia wartość zmiennoprzecinkową 1.0, chociaż w powłoce wprowadziliśmy 1. Dzieje się tak, ponieważ JavaScript ma tylko jeden typ liczbowy, więc każda liczba wprowadzona w powłoce jest konwertowana na podwójną.
Następne żądanie w danych wyjściowych mongosniff to polecenie bazy danych:sprawdza, czy wstawienie się powiodło (powłoka zawsze wykonuje bezpieczne wstawianie).

Ostatnia usłyszana wiadomość jest nieco inna:przechodzi z bazy danych do powłoki. To jest odpowiedź bazy danych na polecenie getlasterror. Wynika z niego, że zwrócono tylko jeden dokument (odpowiedź n:1) i że w bazie danych nie ma już żadnych wyników (cursorId:0). Gdyby to było „prawdziwe” zapytanie i istniałby inny pakiet wyników do wysłania z bazy danych, cursorId byłby niezerowy.

MongoDB w 30 minut


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wskazówki dotyczące aktualizacji serwera Percona do MongoDB

  2. Radzenie sobie z powolnymi zapytaniami w MongoDB

  3. MongoDB wyodrębnia wartości z BasicDBObject (Java)

  4. MongoDB diacriticInSensitive search nie pokazuje wszystkich akcentowanych (słów ze znakiem diakrytycznym) wierszy zgodnie z oczekiwaniami i na odwrót

  5. mongodb:Struktura indeksowania wielokluczowego?