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

Jaka jest maksymalna liczba parametrów przekazywana do zapytania $in w MongoDB?

Samo zapytanie jest dokumentem . MongoDB ogranicza rozmiary dokumentów (od wersji 2.4.0+) do 16 MB.

Naprawdę, to, co robisz ze znaleziskiem, to:

db.collectionName.find(queryDoc)

gdzie 'queryDoc' to coś takiego:

{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }

Aby znaleźć maksymalną liczbę wartości, które można przekazać do zapytania $in, użyj bsonsize polecenie:

mongos> Object.bsonsize([1])
16
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4] } })
74
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5] } })
85
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6] } })
96

Możesz więc zobaczyć, że każda dodatkowa liczba całkowita ma rozmiar 11 bajtów. Nie 11 bitów, 11 bajtów. Wynika to ze sposobu, w jaki BSON wewnętrznie przechowuje liczby jako co najmniej 64 bity każda, plus opakowanie. Można to łatwo zauważyć za pomocą:

mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 690000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000000000] } })
107

Tak więc, bez względu na wielkość pojedynczego numeru, jest to ten sam bsonsize.

Do samego pytania:jak duży jest dokument zapytania?

Dodanie ich do zapytania jednopolowego z klauzulą ​​$in, w pymongo, poprzez monit javascript mongos, cokolwiek, daje te same fakty dodawania dla maksymalnego rozmiaru zapytania $in:

mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
  • Sam dokument zapytania ma 22 bajty;
  • Każdy bajt nazwy pola dodaje jeden bajt;
  • Każda liczba dodana do klauzuli $in dodaje 11 bajtów.

Tak więc, zakładając, że masz jednobajtową nazwę pola (w rzeczywistości minimum), twoje maksimum to:

mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1 
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635

ODPOWIEDŹ:1 525 198 (To 1,5 miliona. To całkiem sporo.)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. CouchDB vs. MongoDB:10 rzeczy, które powinieneś wiedzieć

  2. Bezpieczeństwo bazy danych 101:Zrozumienie uprawnień dostępu do bazy danych

  3. Jak wstawić HTML do Mongodb?

  4. Zmień nazwę ObjectId _id na id w deserializacji Jacksona za pomocą Jongo i MongoDB

  5. Jak wypełnić zagnieżdżone jednostki w manguście?