MongoDB에서 $in 쿼리에 전달되는 파라미터의 최대 수는 몇 개입니까?
MongoDB에서 $in 쿼리에 전달되는 파라미터의 최대 수는 몇 개입니까?
쿼리 자체는 문서입니다. MongoDB는 문서 크기(2.4.0 이상)를 16MB로 제한합니다.
사실, 당신이 찾는 것은 다음과 같습니다.
db.collectionName.find(queryDoc)
여기서 'queryDoc'은 다음과 같습니다.
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
$in 쿼리에 전달할 수 있는 최대 값 수를 찾으려면 bsonsize 명령을 사용합니다.
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
따라서 추가되는 모든 정수의 크기는 11바이트임을 알 수 있습니다.11비트가 아니라 11바이트.이는 BSON이 내부적으로 64비트 이상의 숫자와 래퍼를 저장하기 때문입니다.이것은, 다음과 같이 간단하게 확인할 수 있습니다.
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
그래서, 개별 숫자의 크기에 상관없이, 같은 크기의 번즈사이즈입니다.
질문 자체에 대해서:그 질의 서류는 얼마나 큰가요?
pymongo에서 mongos javascript 프롬프트를 통해 $in 절을 사용하여 하나의 필드 쿼리를 위해 이들을 합산하면 $in 쿼리의 최대 크기에 대해 동일한 추가 사실을 얻을 수 있습니다.
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- 쿼리 문서 자체는 22바이트입니다.
- 필드 이름의 각 바이트는 1바이트를 추가합니다.
- $in 절에 추가된 각 숫자는 11바이트를 추가합니다.
따라서, 1바이트의 필드명(최소, 정말로)이 있다고 가정하면, 최대치는 다음과 같습니다.
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
정답: 1,525,198 (150만)꽤 크네요.)
제한은 없는 것 같아요.
나는 작은 테스트를 했다.
1) 컬렉션 A에는 100만 개의 단순 JSON 오브젝트 {id:,name:}이(가)
2) Collection B에서는 Collection A의 레퍼런스 ID를 로드하여 다음과 같은 예외를 인정받았습니다.최대 450k의 참조 카운트를 삽입할 수 있습니다.
Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 18388885 is over Max BSON size 16777216
3) $in[id1...id450000]으로 이 ID 중 45k를 전송하여 컬렉션 A의 100만 객체에서 45k ID의 전체 목록을 가져올 수 있습니다.
와! 이 정도면 내 지원서 :D에 충분하고도 남는다.MongoDB 정말 멋있어요.
제한은 단지 BSONDOURE의 크기에 따라 결정된다고 생각합니다.쿼리를 정의할 때 최대 문서 크기를 초과할 때까지 $in 절에 값을 계속 추가할 수 있습니다.따라서 절에 포함할 수 있는 값의 수는 각 값의 크기에 따라 달라집니다(각 값의 크기가 작을수록 $in 절에 포함할 수 있습니다).
퍼포먼스 면에서는 $in 조항의 값 수에 대해 "스위트 스폿"이 있습니다.다음 관련 질문에서 답변을 참조하십시오.MongoDB를 요청당 여러 번 조회해도 될까요?
즉, $in 절의 값 수와 전송된 쿼리 수의 균형을 유지합니다.좀 더 자세히 알아보기 위해 블로그 투고를 검토 중입니다.
IN 절에 몇 개의 UUID를 전달할 수 있는지 확인하기 위해 답변을 찾고 있었습니다.그래서 혹시 도움이 될지 모르니까 결과를 올리세요.
다음과 같이 500개의 UUID를 전달하려고 했습니다.
Object.bsonsize({ 'fieldOne' : { $in : [
"3bd209e1-41c9-4ad2-a62c-bbe3d2ae490a",
"3bd209e1-41c9-4ad2-a62c-bbe3d2ae490a",
"3bd209e1-41c9-4ad2-a62c-bbe3d2ae490a".
..
..] } })
결과: 23518
언급URL : https://stackoverflow.com/questions/5331549/what-is-the-maximum-number-of-parameters-passed-to-in-query-in-mongodb
'programing' 카테고리의 다른 글
속성 탐색기처럼 작동하는 GUI 기반 또는 웹 기반 JSON 편집기 (0) | 2023.03.18 |
---|---|
네이티브 응답 글꼴 크기 반응 (0) | 2023.03.18 |
ng-hide/ng-show에서 복잡한 표현이 가능합니까? (0) | 2023.03.13 |
Wordpress 사이트가 해킹됨 - 다른 사이트로 리디렉션 (0) | 2023.03.13 |
oracle sql developer를 사용하여 데이터베이스 간에 복사 - 연결에 실패했습니다. (0) | 2023.03.13 |