MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sử dụng Mongosniff để làm rõ những gì MongoDB của bạn nghe và nói

Viết ứng dụng trên đầu khung của trình điều khiển trên đầu cơ sở dữ liệu hơi giống như một trò chơi trên điện thoại:bạn nói “insert foo” và cơ sở dữ liệu cho biết “máy rửa bát với những con khỉ màu tím”.
Mongosniff cho phép bạn xem chính xác những gì cơ sở dữ liệu nghe và nói.
Nó đi kèm với bản phân phối nhị phân, vì vậy nếu bạn có mongod, bạn nên có mongosniff.

Để thử điều này, trước tiên, hãy chạy phiên bản mongod như bình thường:

$ ./mongod

Khi bạn chạy mongosniff, bạn phải yêu cầu nó lắng nghe giao diện loopback (localhost). Giao diện này thường được gọi là “lo”, nhưng máy Mac của tôi gọi nó là “lo0”, vì vậy hãy chạy ifconfig để đảm bảo bạn đặt đúng tên cho nó. Bây giờ hãy chạy nó:

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

Lưu ý “sudo”:điều này không bao giờ hiệu quả với tôi từ tài khoản người dùng của tôi, có thể là do một số quyền mạng ngu ngốc.

Bây giờ hãy chạy trình bao Mongo và cố gắng chèn một cái gì đó:

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

Nếu bạn nhìn vào kết quả mongosniff, bạn sẽ thấy:

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 }

Có ba yêu cầu, tất cả cho một lần chèn khổ sở. Bằng cách cắt yêu cầu đầu tiên, chúng tôi có thể tìm ra:

nguồn ->>
nơi đến

Khách hàng của chúng tôi,
Trong trường hợp này, mongo, hoạt động thông qua cổng 57856 và gửi thông báo đến cơ sở dữ liệu (127.0.0.1:27017).
dB
bộ sưu tập

Truy vấn này dành cho bộ sưu tập "foo" của cơ sở dữ liệu "thử nghiệm".
Độ dài byte

Độ dài yêu cầu là 62 byte. Điều này có thể thuận tiện nếu yêu cầu của bạn gần với độ dài yêu cầu tối đa (16 MB).

id:
thập lục phân
số nhận dạng

Đây là ID yêu cầu ở dạng thập lục phân và thập phân (hiển nhiên là trong trường hợp bạn không có máy tính). Mỗi truy vấn đến cơ sở dữ liệu có một số nhận dạng duy nhất được liên kết với nó cho mục đích thuế.
op:
nội dung.

Đây là nội dung thực tế của yêu cầu:chúng tôi chèn tài liệu này. Lưu ý rằng nó sẽ chèn một giá trị dấu phẩy động là 1,0 mặc dù chúng tôi đã nhập 1 vào shell. Điều này là do JavaScript chỉ có một loại số, vì vậy mỗi số được nhập vào trình bao được chuyển đổi thành số kép.
Yêu cầu tiếp theo trong đầu ra của mongosniff là lệnh cơ sở dữ liệu:nó kiểm tra xem việc chèn có thành công hay không (trình bao luôn thực hiện các thao tác chèn an toàn).

Thông báo cuối cùng nghe được hơi khác một chút:nó đi từ cơ sở dữ liệu sang trình bao. Đây là phản hồi của cơ sở dữ liệu đối với lệnh getlasterror. Nó cho thấy rằng chỉ có một tài liệu được trả về (câu trả lời n:1) và không có thêm kết quả nào đang chờ trong cơ sở dữ liệu (con trỏ chuột:0). Nếu đây là một truy vấn "thực" và có một gói kết quả khác để gửi từ cơ sở dữ liệu, thì cursorId sẽ khác 0.

MongoDB sau 30 phút


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hiệu suất MongoDB:Chạy MongoDB tổng hợp trên trang thứ hai

  2. Làm cách nào để liệt kê tất cả cơ sở dữ liệu MongoDB trong Node.js?

  3. Tổng quan về Công cụ lưu trữ WiredTiger cho MongoDB

  4. Kiểm tra số lượng kết nối hiện tại với MongoDb

  5. MongoDB đổi tên trường cơ sở dữ liệu trong mảng