MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Was ist die maximale Anzahl von Parametern, die in MongoDB an die $in-Abfrage übergeben werden?

Die Abfrage selbst ist ein Dokument . MongoDB begrenzt die Dokumentgröße (ab Version 2.4.0+) auf 16 MB.

Wirklich, was Sie mit einem Fund machen, ist:

db.collectionName.find(queryDoc)

wobei 'queryDoc' so etwas wie:

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

Um die maximale Anzahl von Werten zu ermitteln, die Sie an eine $in-Abfrage übergeben können, verwenden Sie bsonsize Befehl:

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

Sie können also sehen, dass jede zusätzliche Ganzzahl 11 Bytes groß ist. Nicht 11 Bit, 11 BYTES. Dies liegt daran, dass BSON Zahlen intern mit jeweils mindestens 64 Bit plus Wrapper speichert. Dies ist leicht zu sehen mit:

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

Also, egal wie groß eine einzelne Zahl ist, es ist die gleiche bsonsize.

Zur eigentlichen Frage:Wie groß ist das Abfragedokument?

Wenn Sie diese für eine Ein-Feld-Abfrage mit einer $in-Klausel in Pymongo über die Mongos-Javascript-Eingabeaufforderung addieren, was auch immer, ergeben sich alle die gleichen zusätzlichen Fakten für die maximale Größe einer $in-Abfrage:

mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
  • Das Abfragedokument selbst ist 22 Byte groß;
  • Jedes Byte des Feldnamens fügt ein einzelnes Byte hinzu;
  • Jede Zahl, die der $in-Klausel hinzugefügt wird, fügt 11 Bytes hinzu.

Angenommen, Sie haben einen Ein-Byte-Feldnamen (eigentlich das Minimum), ist Ihr Maximum:

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

DIE ANTWORT:1.525.198 (Das sind 1,5 Millionen. Das ist ziemlich viel.)